例如,PHP代码:如何用C#动态设置变量值?
$test = "hello";
${$test} = $test;
echo $hello; // return hello
如何做到这一点在C#中?提前致谢。
UPD:Dynamic variable in C#? - 这里是答案。
例如,PHP代码:如何用C#动态设置变量值?
$test = "hello";
${$test} = $test;
echo $hello; // return hello
如何做到这一点在C#中?提前致谢。
UPD:Dynamic variable in 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" });
}
}
你的例子对我没有多大意义,谨慎澄清? – BrokenGlass
如何动态设置变量名?在这里回答:http://stackoverflow.com/questions/1282888/dynamic-variable-in-c –
@BrokenGlass:在PHP中,如果'$ test ='foo'',那么'$ {$ test}'访问'$ foo'。 –