簡體   English   中英

如何從值中獲取字段的FieldInfo

[英]How to get the FieldInfo of a field from the value

我想訪問FieldInfo,用於字段上的CustomAttributes以及其他目的,但我不想使用字符串訪問該字段,也不必遍歷類中的所有字段。

如果我有,

class MyClass
{
#pragma warning disable 0414, 0612, 0618, 0649
    private int myInt;
#pragma warning restore 0414, 0612, 0618, 0649

    public MyClass()
    {
        BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
        Console.WriteLine( GetType().GetField("myInt", flags) );

        foreach( FieldInfo fi in GetType().GetFields(flags) )
        {
            Console.WriteLine( string.Format("{0} {1} {2}", fi.Name, myInt, fi.GetValue(this) ) );
        }
    }
}

我知道我可以直接通過“ GetField”函數訪問“ myInt”的FieldInfo,如果我有其名稱的字符串,或者循環通過“ GetFields”,那將再次依賴於字符串“ myInt”來確保您ve正確的字段。

是否可以使用ref myIntout myInt ,或者我不知道的某個關鍵字可以訪問我,還是我僅限於需要字符串名稱來獲得它?

您的意思是從編譯表達式而不是字符串中獲取memberinfo嗎? 例如

class Program
{
    public static void Main()
    {
        var cls = new MyClass();
        Console.WriteLine(GetMemberInfo(cls, c => c.myInt));
        Console.ReadLine();
    }

    private static MemberInfo GetMemberInfo<TModel, TItem>(TModel model, Expression<Func<TModel, TItem>> expr)
    {
        return ((MemberExpression)expr.Body).Member;
    }

    public class MyClass
    {
        public int myInt;   
    }
}

C#6 (您可以在此處獲得CTP)中,有nameof(...)運算符-您將使用:

string name = nameof(myInt);
var fieldInfo = GetType().GetField(name, flags);

這是您的一個選擇,還是必須使用C#5.0(.NET 4.5)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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