我想定义一个像MVC扩展模板函数TextBoxFor一样的函数

该函数的有趣之处在于,我不必指定TProperty类型。
如何在函数定义中进行设置。

我的代码如下:

public class Helper<TItem>
{
    public string GetMemberName(Expression<Func<TItem, TProperty>> expression)
    {
        ... returns TProperty.Name

    }
}


实际的问题是,它无法编译...,因为它找不到TProperty类型。

我想要的结果是使用类型...定义一次该类,然后使用函数GetMemberName来获取每个成员的名称,如MVC框架中那样。

Helper<Employee> h = new Helper<Employee>();
string name = h.GetMemberName(e=>e.Name);
....


编写代码时,我不想被迫指定TProperty类型。基本上,它可以是任何对象。

谢谢,

拉杜

最佳答案

这是您需要的:

public class Helper<TItem>
{
    public string GetMemberName<TProperty>(Expression<Func<TItem, TProperty>> expression)
    {
        return string.Empty; // I didn't implement it
    }
}


只需在方法名称后附加<TProperty>即可使其通用。而且TProperty的类型可以从提供的表达式中推断出来,因此在使用时无需指定其类型,可以很简单:

Helper<Employee> h = new Helper<Employee>();
h.GetMemberName( e=>e.Name); //if Employee has such a property

09-08 00:55