типы в .net
От: Аноним  
Дата: 17.04.04 07:19
Оценка:
Помогуте plz =)
мне надо сделать такое финт ушами =)
у меня в стринге храниться название типа к примеру typeName = "System.Int32",и два значения тоже в стрингах a = "1" и b ="2" мне надо их проверить на больше/меньше.. =)

ну типа было бы просто
try
{
switch (typeName)
{
case "System.Int32": if ( Convert.ToInt32(a) > Convert.ToInt32(b)) ......
}
}

Но... признайтесь.. криво.. КАК это сделать по-нормальному? =)))
Re: типы в .net
От: Аноним  
Дата: 17.04.04 08:00
Оценка:
А>у меня в стринге храниться название типа к примеру typeName = "System.Int32",и два значения тоже в стрингах a = "1" и b ="2" мне надо их проверить на больше/меньше.. =)
А>КАК это сделать по-нормальному? =)))
не знаю, насколько нормален такой вариант, но он работает:
    class Class1
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();

            object o42 = c.GetObject("System.Int32", "42");
            object o55 = c.GetObject("System.Int32", "55");

            int i42 = (int)o42;

            if(o42.GetType() == o55.GetType() && o42 is IComparable && o55 is IComparable)
            {
                Console.WriteLine((o42 as IComparable).CompareTo(o55 as IComparable));
            }
            else
            {
                Console.WriteLine("объекты не сравнимы");
            }

            Console.ReadLine();
        }

        private object GetObject(string typeName, string value)
        {
            Type type = Type.GetType(typeName);
            MethodInfo mi = type.GetMethod("Parse", new Type[]{typeof(string)});
            if(mi == null || !mi.IsStatic)
                return null;

            object result = Activator.CreateInstance(Type.GetType(typeName));

            result = mi.Invoke(result, new object[]{value});

            return result;
        }
    }
Re[2]: типы в .net
От: Sulik Россия http://nickpasko.blogspot.com
Дата: 17.04.04 08:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>        private object GetObject(string typeName, string value)
А>        {
А>            Type type = Type.GetType(typeName);
А>            MethodInfo mi = type.GetMethod("Parse", new Type[]{typeof(string)});
А>            if(mi == null || !mi.IsStatic)
А>                return null;

А>            object result = Activator.CreateInstance(Type.GetType(typeName));

А>            result = mi.Invoke(result, new object[]{value});

А>            return result;
А>        }
А>


А шо це таке, если не секрет, конечно?
Сознание определяет бытие!
Re[3]: типы в .net
От: Аноним  
Дата: 17.04.04 08:18
Оценка:
S>[b]А> MethodInfo mi = type.GetMethod("Parse", new Type[]{typeof(string)});
S>А шо це таке, если не секрет, конечно?
это такое неявное допущение, что у типа есть метод Parse — если уж его можно хранить и восстаналивать из строки.
соотв, работает только с некоторыми типами
Re: типы в .net
От: Inco  
Дата: 17.04.04 08:36
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:
Спасибо всем. я нашёл как =)
Comparer.Default.Compare(object,object) =))))
Re[2]: типы в .net
От: Аноним  
Дата: 17.04.04 09:11
Оценка:
Здравствуйте, Inco, Вы писали:

I>Здравствуйте, Аноним, Вы писали:

I>Спасибо всем. я нашёл как =)
I>Comparer.Default.Compare(object,object) =))))
cравниваешь строки или целые? сравни "1000000" и "2"
Re: типы в .net
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.04.04 18:45
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>мне надо сделать такое финт ушами =)

А>у меня в стринге храниться название типа к примеру typeName = "System.Int32",и два значения тоже в стрингах a = "1" и b ="2" мне надо их проверить на больше/меньше.. =)

public int Compare(string typeName, string val1, string val2)
{
    Type compType = Type.GetType(typeName);
    if (compType == null)
        throw new ArgumentException("Could not find type");
    if (!typeof (IComparable).IsAssignableFrom(compType))
        throw new ArgumentException("Instances of supplied type are incomparable");
    TypeConverter conv = TypeDescriptor.GetConverter(compType);
    if (conv.CanConvertFrom(typeof (string)))
        throw new ArgumentException("Not able to convert supplied type from string");
    return ((IComparable)conv.ConvertFromString(val1)).CompareTo(conv.ConvertFromString(val2));
}
... << RSDN@Home 1.1.3 beta 2 (Win32NT 5.1.2600.0) >>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.