我不知道Func<T, TResult>
的完整操作,所以也许我的问题很简单或显而易见。
我有一个函数的以下标题:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
//Code....
}
我想从S
对象访问属性。可能的?
例如:S.name
抱歉我的英文。
答案 0 :(得分:3)
首先,您应该知道,在您的方法中,您没有 S
个对象。您的函数需要S
并返回T
。在这种情况下,我假设您的方法负责制作S
个实例并将它们作为参数传递给testFunc
。
但是,您可以使用反射访问S
的类型信息:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
var typeofS = typeof(S);
var s = new S();
var defaultName = (string)(typeofS.GetProperty("Name").GetValue(s, null));
}
(我希望它显而易见但是,如果你得到的S
没有Name
属性,反射就会失败;生产代码当然应该做得更多{{1检查,异常处理等。)
答案 1 :(得分:1)
你能写下:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : S, new()
{
//Code....
}
S谁是你的班级类型?或者你的抽象类类型,你已经有一些共同的属性?
答案 2 :(得分:0)
你的所有方法都知道S
它是一个类,可以实例化。它不知道它是否具有名为name
的属性。您可能需要要求该参数从具有预期属性的接口或类继承。
您也可以尝试转换为知道类型,了解如果对象不属于该类型,则转换可能会失败。