А>у меня в стринге храниться название типа к примеру 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;
}
}
Здравствуйте, Аноним, Вы писали:
А>А> 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;
А> }
А>
А шо це таке, если не секрет, конечно?
S>[b]А> MethodInfo mi = type.GetMethod("Parse", new Type[]{typeof(string)});
S>А шо це таке, если не секрет, конечно? 
это такое неявное допущение, что у типа есть метод Parse — если уж его можно хранить и восстаналивать из строки.
соотв, работает только с некоторыми типами
Здравствуйте, <Аноним>, Вы писали:
А>мне надо сделать такое финт ушами =)
А>у меня в стринге храниться название типа к примеру 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) >>