例如,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'。 –