如何在C#中动态命名变量?

时间:2011-02-17 19:36:47

标签: c# variables dynamic-data

有没有办法动态命名变量?

我需要做的是从输入文件中获取变量名称列表,并使用这些名称创建变量。这可能吗?

类似的东西:

Variable <dynamic name of variable here> = new Variable(input);

假设我已经处理了Variable类,并且该变量的名称包含在名为strLine的字符串中。

9 个答案:

答案 0 :(得分:15)

使用Dictionary<string, Variable>

e.g。

var vartable = new Dictionary<string, Variable>();
vartable[strLine] = new Variable(input);

答案 1 :(得分:4)

C#4.0,使用dynamic个对象:

dynamic d = new ExpandoObject();
((IDictionary<string, object>)d)["MyProperty"] =  5;
int val = d.MyProperty; // 5

答案 2 :(得分:1)

不,但你可以使用Dictionary<string, Variable>,然后你可以用引用名称来引用每个变量。

答案 3 :(得分:1)

你不能这样做,但你想要做的是乞求使用词典:

Dictionary<object, object> d = new Dictionary<string, object>();
d.Add("Variable1", value1);
d.Add("Variable2", value2);
d.Add("Variable3", value3);

答案 4 :(得分:1)

尝试这个,用户json序列化和反序列化:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Script.Serialization;

    namespace ConsoleApplication1
    {
     public class Program
     {
        static void Main(string[] args)
        {
            object newobj = new object();

            for (int i = 0; i < 10; i++)
            {
              List<int> temp = new List<int>();

              temp.Add(i);
              temp.Add(i + 1);

               newobj = newobj.AddNewField("item_" + i.ToString(), temp.ToArray());
            }

       }

    }

    public static class DynamicExtention
    {
        public static object AddNewField(this object obj, string key, object value)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();

            string data = js.Serialize(obj);

            string newPrametr = "\"" + key + "\":" + js.Serialize(value);

            if (data.Length == 2)
           {
               data = data.Insert(1, newPrametr);
            }
          else
            {
                data = data.Insert(data.Length-1, ","+newPrametr);
            }

            return js.DeserializeObject(data);
        }
     }
    }

答案 5 :(得分:0)

变量名称应在编译时知道。如果您打算在运行时动态填充这些名称,可以使用List<T>

 var variables = List<Variable>();
 variables.Add(new Variable { Name = input1 });
 variables.Add(new Variable { Name = input2 });
 ...

答案 6 :(得分:0)

没有。但是,您可以将它们加载到Dictionary对象中。这允许您仍然使用名称(稍微)引用它们,这比使用索引更容易,就像使用Array或ArrayList一样。

答案 7 :(得分:0)

我会使用某种键控集合,例如哈希表,字典或带有名称的结构列表。然后,您可以按名称引用变量:

var value = variableDictionary["MyVariableName"];
var value = variableHashtable["MyVariableName"];
var value = variableList.First(x=>x.Name == "MyVariableName");

没有其他方法可以动态“命名”变量。

答案 8 :(得分:-1)

没有。使用数组,否则你不能这样做。