如何用c#动态设置变量值

本文关键字:设置 变量值 动态 何用 | 更新日期: 2023-09-27 18:10:07

例如,PHP代码:

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

如何在c#中做到这一点?提前谢谢。


UPD: c#中的动态变量?——这里有一个答案

如何用c#动态设置变量值

这在c#中不支持。您可以使用ExpandoObject并在其上设置一个成员,但这与PHP代码不完全相同。您仍然需要通过变量名来引用ExpandoObject

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

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

c#在语言层面上并不是为这种事情设计的。您必须使用反射来实现这一点,并且只能用于字段,而不能用于局部变量(不能通过反射访问)。

这种对类成员的动态访问可以通过反射来实现。

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" } );
    }
}