[英]Extension method for strongly typed property access
我有以下類層次結構
class Test
{
public string Name { get; set; }
}
class TestChild : Test
{
public string Surname { get; set; }
}
我無法改變Test類。 我想寫下面這樣的擴展方法:
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);
}
}
但現在編譯說
無法從用法中推斷出方法“ConsoleApplication1.TestExtensions.Property(ConsoleApplication1.Test,System.Linq.Expressions.Expression>)”的類型參數。 嘗試顯式指定類型參數。
我希望有類似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;
}
static class TestExtensions
{
public static string Property<TModel, TProperty>(this TModel test, Expression<Func<TModel, TProperty>> property)
{
return property.ToString();
}
}
編譯器應該能夠推斷出第一個參數......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.