如何在C#中使用动态名称创建变量?

问题描述:

我想在for循环中创建一个var,例如如何在C#中使用动态名称创建变量?

for(int i; i<=10;i++) 
{ 
    string s+i = "abc"; 
} 

这应该创建变量s0,s1,s2 ...到s10。

+2

您的公司从事什么语言? – ChrisF 2009-07-18 16:38:45

+0

你的意思是动态类型吗? – exclsr 2009-07-18 16:40:31

+0

请指定上下文... – 2009-07-18 16:40:58

由于您试图重新定义变量“i”,因此您的第一个示例不适用于任何语言。这是循环控制中的int,但循环体中有string

根据您的更新问题的最简单方法是使用数组(在C#):如果是在语言的版本

string[] s = new string[10]; 
for (int i; i< 10; i++) 
{ 
    s[i] = "abc"; 
} 

使用某种eval

这取决于语言。

通常当人们想要这样做时,正确的做法是使用数据结构,如存储关键名称和关联值的散列表/字典/映射。

很明显,这高度依赖于语言。在大多数语言中,它是不可能的。在Javascript中,在浏览器中,以下工作:

for (var i = 0; i<10 ; i++) { window["sq"+i] = i * i; } 

现在变量SQ3,例如,设定为9

你可能想使用一个数组。我完全不知道他们在C#(我是一个Java的人)是如何工作的,但这样的事情应该这样做:

string[] s = new string[10]; 
for (int i; i< 10; i++) 
{ 
    s[i] = "abc"; 
} 

而且读 http://msdn.microsoft.com/en-us/library/aa288453(VS.71).aspx

您可以使用字典。 密钥 - 对象 价值的动态名称 - 对象

 Dictionary<String, Object> dictionary = new Dictionary<String, Object>(); 
     for (int i = 0; i <= 10; i++) 
     { 
      //create name 
      string name = String.Format("s{0}", i); 
      //check name 
      if (dictionary.ContainsKey(name)) 
      { 
       dictionary[name] = i.ToString(); 
      } 
      else 
      { 
       dictionary.Add(name, i.ToString()); 
      } 
     } 
     //Simple test 
     foreach (KeyValuePair<String, Object> kvp in dictionary) 
     { 
      Console.WriteLine(String.Format("Key: {0} - Value: {1}", kvp.Key, kvp.Value)); 
     } 

输出:

Key: s0 - Value: 0 
Key: s1 - Value: 1 
Key: s2 - Value: 2 
Key: s3 - Value: 3 
Key: s4 - Value: 4 
Key: s5 - Value: 5 
Key: s6 - Value: 6 
Key: s7 - Value: 7 
Key: s8 - Value: 8 
Key: s9 - Value: 9 
Key: s10 - Value: 10