如何用C#动态设置变量值?

时间:2011-10-01 15:33:58

标签: c#

例如,PHP代码:

$test = "hello";
${$test} = $test;
echo $hello; // return hello

如何在C#中执行此操作?提前谢谢。


UPD:Dynamic variable in C#? - 这是一个答案。

3 个答案:

答案 0 :(得分:2)

C#不支持此功能。您可以使用ExpandoObject并在其上设置成员,但它与PHP代码不完全相同。您仍然需要通过变量名称引用ExpandoObject

dynamic myObject = new ExpandoObject();
string test = "Hello";
((IDictionary<string, object>)myObject).Add(test, test);
Console.WriteLine(myObject.Hello);

尽管如此,这对代码清晰度没有帮助。如果要做的只是将名称映射到值,您可以使用Dictionary,这正是ExpandoObject内部使用的内容,正如上面代码中的强制转换所示。

答案 1 :(得分:1)

C#不是为语言层面的那种东西而设计的。您将不得不使用反射来实现它,并且仅用于字段,而不是局部变量(不能通过反射访问)。

答案 2 :(得分:-1)

这种对班级成员的动态访问可以通过反思来实现。

class Foo
{
    string test;
    string hello;

    void Bar()
    {
        test = "hello";

        typeof(Foo).InvokeMember( test, 
           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, 
           null, this, new object[] { "newvalue" } );
    }
}