簡體   English   中英

C#相當於字段的typeof

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM