如何使用反射将每个“MyTypes”列表传递给具有 T:MyDataObject 约束的泛型方法?
public interface IAllMyTypes
{
List<FirstType> MyType1 { get; set; }
List<SecondType> MyType2 { get; set; }
List<ThirdType> MyType3 { get; set; }
}
FirstType、SecondType 和 ThirdType 继承自 MyDataObject(如下所示),但具有不同的属性。
public class FirstType : MyDataObject
{
//various properties
}
我一直无法将数据传递到具有此签名的方法中:
void DoSomething<T>(IEnumerable<T> enumerable) where T : MyDataObject;
错误是“无法推断类型参数”。
这是我不成功的尝试:
public void DoSomethingWithAllMyTypes(IAllMyTypes allMyTypes)
{
foreach (PropertyInfo propertyInfo in allMyTypes.GetType().GetProperties())
{
var x = propertyInfo.GetValue(allMyTypes) as IList;//im not sure what to do here
if(x==null) throw new Exception("still wrong");
DoSomething(x);
}
}
如果我直接提供如下所示的属性,则 DoSomething(..) 中的所有代码都可以正常工作:
public void DoSomethingWithAllMyTypes(IAllMyTypes allMyTypes)
{
DoSomething(allMyTypes.MyType1);
DoSomething(allMyTypes.MyType2);
DoSomething(allMyTypes.MyType3);
}