【发布时间】:2014-06-20 17:38:07
【问题描述】:
我创建了一个通用类来将一些数据解析到类的另一个实例中 (MyClass1)。由于 MyClass1 只有内置的 C# 类型,我的 GenericMethod 工作正常。当MyClass1 有另一个MyClass2 属性并且我仍然想调用我的GenericMethod 来解析我的数据时,问题开始增长。
我无法在其范围内触发我的 Generic Class 方法,因为我需要更改 T 的类型。有没有办法解决这个问题?
public class MyClass1
{
public int MyIntProperty { get; set; }
public string MyStringProperty { get; set; }
public MyClass2 MyClass2Property { get; set; }
}
public class MyClass2
{
public int MyOtherIntProperty { get; set; }
public string MyOtherStringProperty { get; set; }
public bool MyOtherBoolProperty { get; set; }
}
public class MyGenericClass<T> where T : class
{
public static T MyGenericMethod()
{
T o = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] pi = typeof(T).GetProperties();
for(int i = 0; i < pi.Count(); i++)
{
if(pi[i].Name == "MyClass2Property")
{
//How to proceed ?
MyGenericClass<???>.MyGenericMethod();
}
else
{
pi[i].SetValue(o, Convert.ChangeType(someValue, pi[i].PropertyType), null);
}
}
}
}
public static void Main(string[] args)
{
MyClass1 mc1 = MyGenericClass<MyClass1>.MyGenericMethod();
//Do something with mc1
}
【问题讨论】:
-
你不能把
MyGenericClass<T>改成MyGenericClass<T,U>然后打电话给MyGenericClass<U>.MyGenericMethod()吗? (如果您添加另一个级别的递归,这当然不会工作......) -
MyGenericClass有更多功能吗?想知道为什么类不只是static和方法本身的T类型参数,比如MyGenericMethod<T>()? -
为什么不直接使用 BinaryFormatter 类并序列化 MyClass1? msdn.microsoft.com/en-us/library/…
标签: c# asp.net generics system.reflection