[英]C# equivalent of typeof for fields
使用反射,您可以在運行時從字符串中查找類,但您也可以說typeof(Foo)並獲得編譯時類型檢查,自動完成等。
如果你想要的是一個字段而不是一個類,你可以在運行時從一個字符串中查找它,但如果你想要編譯時類型檢查等,那么無論如何要說像fieldof(Foo.Bar)? 我事先知道了類和字段的名稱,我希望能夠在編譯時引用該字段而不是運行時字符串查找。
編輯:我想要使用它的一個例子,比如我有一個可能已從數據庫中讀取的對象列表,我想在DataGridView中顯示它們,但我只想顯示某些字段的列。 我想寫一個類似的方法:
void DisplayData(object[] objs, params FieldInfo[] fields)
並能夠稱之為
DisplayData(accounts, fieldof(Account.Name), fieldof(Account.Email));
那種想法。
您可以使用表達式刪除字符串文字
public static PropertyInfo GetProperty<T>(Expression<Func<T, object>> expression)
{
MemberExpression memberExpression = null;
if (expression.Body.NodeType == ExpressionType.Convert)
{
memberExpression = ((UnaryExpression)expression.Body).Operand as MemberExpression;
}
else if (expression.Body.NodeType == ExpressionType.MemberAccess)
{
memberExpression = expression.Body as MemberExpression;
}
return memberExpression.Member as PropertyInfo;
}
// usage:
PropertyInfo p = GetProperty<MyClass>(x => x.MyCompileTimeCheckedPropertyName);
不適合田野。 您可以獲得的最接近的是“使用別名”,它允許您為類型指定替代名稱:例如,使用foo = System.Collections.Generic.List;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.