简体   繁体   English

C#:传递变量时使用变量的字符串名称

[英]C# : using a variable when being passed it's string name

so if the string name of a variable is passed into a method, I know which variable to use. 因此,如果将变量的字符串名称传递给方法,则我知道要使用哪个变量。

in the following example, the area I need help with is PrintVar(string)...turning the string argument into the variable...so that it prints out "here be variable 1" and "here be variable 2" respectively...Thanks! 在下面的示例中,我需要帮助的区域是PrintVar(string)...将string参数转换为变量...,以便分别打印出“ here be variable 1”和“ here be variable 2”。 。谢谢!


class ReflectionTest
{    
    class MyObj
    {
        private string myvar;

        public MyObj(string input)
        {   this.myvar = input; }

        public override string ToString()
        {   return ("here be " + myvar);    }   
    }

    class MyClass
    {
        private MyObj var1;
        private MyObj var2;

        public MyClass()
        {   
            var1 = new MyObj("variable 1");
            var2 = new MyObj("variable 2");
        }

        public void PrintVar(string theVariable)
        { 
            Console.WriteLine(theVariable); 
        }   
    }


    static void Main()
    {
        MyClass test = new MyClass();
        test.PrintVar("var1");
        test.PrintVar("var2");
    }
}

If you need to fetch things by name, then personally I'd start by using a dictionary in the internal implementation, ie 如果您需要按名称获取内容,那么就个人而言,我将在内部实现中使用字典开始,即

private readonly Dictionary<string,MyObj> fields =new Dictionary<string,MyObj>();

public MyClass()
{
    fields["var1"] = new MyObj("variable 1");
    fields["var2"] = new MyObj("variable 2");
}
public void PrintVar(string fieldName)
{
    Console.WriteLine(fields[fieldName]);
}

The other option would be reflection ( GetType().GetFields() ): 另一个选项是反射( GetType().GetFields() ):

public void PrintVar(string fieldName)
{
    Console.WriteLine(GetType().GetField(fieldName,
        BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM