2011-10-01 61 views
1

例如,PHP代碼:如何用C#動態設置變量值?

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

如何做到這一點在C#中?提前致謝。


UPD:Dynamic variable in C#? - 這裏是答案。

+2

你的例子對我沒有多大意義,謹慎澄清? – BrokenGlass

+2

如何動態設置變量名?在這裏回答:http://stackoverflow.com/questions/1282888/dynamic-variable-in-c –

+0

@BrokenGlass:在PHP中,如果'$ test ='foo'',那麼'$ {$ test}'訪問'$ foo'。 –

回答

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

C#並不是爲語言層面的那類設計而設計的。你將不得不使用反射來實現這一點,只能用於字段,而不能用局部變量(不能通過反射來訪問)。

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