我需要获得一种财产类型,这种类型只有在操作时间才知道,并且作为通用方法的类型参数。 例如:
PropertyInfo prop = Bar.GetProperty("Property1");
//"type prop could not be found" error
Foo<prop.PropertyType>();
void Foo<T>()
{
//Stuff
}
class Bar
{
string Property1{get;set;}
}
律师资格的类型在编纂时将不为人所知,因此,我可以打上<编码>。 Foo<string>。 如果我使用<代码>,将进行正确汇编和操作。 Foo<dynamic>;,但I m不相信最佳途径,我很想知道,是否有办法利用较老的框架做到这一点。
Hopefully, this more complete example will make my intentions clearer:
public void Map(TInType inObject, TOutType outObject)
{
//propertyIn, propertyOut, and converter are all strings identifying the properties/methods to be used from the inObject/Type outObject/Type.
SetPropertyValues<dynamic, dynamic>(inObject, outObject, propertyIn, propertyOut, converter);
}
private void SetPropertyValues<TPropIn,TPropOut>(TInType fromObject, TOutType toObject, string propertyIn, string propertyOut, string converter)
{
PropertyInfo prop1 = typeof(TInType).GetProperty(propertyIn);
MethodInfo converterMethod = typeof(TInType).GetMethod(converter);
PropertyInfo prop2 = typeof(TOutType).GetProperty(propertyOut);
prop2.SetValue(
toObject,
CopyPropertyValue<TPropIn, TPropOut>((TPropIn)prop1.GetValue(fromObject, null), p => (TPropOut)converterMethod.Invoke(fromObject, new object[] { p })),
null);
}
private TPropOut CopyPropertyValue<TPropIn, TPropOut>(TPropIn InPropValue, Func<TPropIn, TPropOut> converterFunction)
{
return converterFunction(InPropValue);
}
我对任何人可能提出的任何其他建议持开放态度,或者应当收回和击退该守则,但我的原始问题仍然是我最感兴趣的一个问题。