vendredi 5 août 2016

Is there any way to get the variable name in C#?

I thought I could use Reflection to get the variable info, including its name, but is doesn't work.

public class C
{
    public List<string> M1{get; set;}
    public List<string> M2{get; set;}
}

static void Main(string[] args)
{
    C c = new C();
    CheckMethod(c.M1);
    ChekcMethod(c.M2);
}

void CheckMethod(List<string> m)
{
    //Want to get the name "M1" or "M2", but don't know how
    Console.Write(m.VariableName);
}

Then, I thought attribute could be the solution.

public class C
{
    [DisplayName("M1")]
    public List<string> M1{get; set;}
    [DisplayName("M2")]
    public List<string> M2{get; set;}
}

static void Main(string[] args)
{
    C c = new C();
    CheckMethod(c.M1);
    ChekcMethod(c.M2);
}

void CheckMethod(List<string> m)
{
    //Find all properties with DisplayNameAttribute
    var propertyInfos = typeof(C)
            .GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
                           | BindingFlags.GetField | BindingFlags.GetProperty)
            .FindAll(pi => pi.IsDefined(typeof(DisplayNameAttribute), true));
    foreach (var propertyInfo in propertyInfos)
    {
        //I can get the DisplayName of all properties, but don't know m is M1 or M2

    }
}

  • Is there any native reflection way to get variable's name?
  • How to determine which member variable the method parameter represent?

I'm working with Unity3D, so the .net version is 3.5





Aucun commentaire:

Enregistrer un commentaire