gpt4 book ai didi

c# - 强类型属性访问的扩展方法

转载 作者:行者123 更新时间:2023-11-30 19:33:00 24 4
gpt4 key购买 nike

我有以下类层次结构

class Test
{
public string Name { get; set; }
}

class TestChild : Test
{
public string Surname { get; set; }
}

不能更改测试类。我想像这样编写以下扩展方法:

static class TestExtensions
{
public static string Property<TModel, TProperty>(this Test test, Expression<Func<TModel, TProperty>> property)
{
return property.ToString();
}
}

为了能够以下列方式使用它:

class Program
{
static void Main(string[] args)
{
TestChild t = new TestChild();
string s = t.Property(x => x.Name);
}
}

但是现在编译器说

The type arguments for method 'ConsoleApplication1.TestExtensions.Property(ConsoleApplication1.Test, System.Linq.Expressions.Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我想要类似 mvc Html.TextBoxFor(x => x.Name) 的方法。是否可以编写要使用的扩展,如 Main 方法所示?

最佳答案

您需要为调用指定通用参数,仅此而已:

string s = t.Property<TestChild, string>(x => x.Name);

编辑:

我的错。我错过了真正的问题:

public static string Property<TModel, TProperty>(this TModel model, Expression<Func<TModel, TProperty>> property)
{
return property.ToString();
}

这应该可以省略通用参数。我假设您也在处理此方法中的真实代码以获取属性名称?如果没有,您可能真的想要这个:

public static string Property<TModel, TProperty>(this TModel model, Expression<Func<TModel, TProperty>> property)
{
var memberExpression = property.Body as MemberExpression;
return memberExpression.Member.Name;
}

关于c# - 强类型属性访问的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com