访问对象的属性Func <s,t =“”> </s,>

时间:2014-04-15 13:36:33

标签: c#

我不知道Func<T, TResult>的完整操作,所以也许我的问题很简单或显而易见。

我有一个函数的以下标题:

private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
   //Code....
}

我想从S对象访问属性。可能的?

例如:S.name

抱歉我的英文。

3 个答案:

答案 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的属性。您可能需要要求该参数从具有预期属性的接口或类继承。

您也可以尝试转换为知道类型,了解如果对象不属于该类型,则转换可能会失败。