如何在C#中dynamic地命名variables?
有没有办法dynamic命名variables?
我需要做的是从input文件中获取variables名称列表,并使用这些名称创buildvariables。 这可能吗?
就像是:
Variable <dynamic name of variable here> = new Variable(input);
假设我已经拥有了Variable
类,并且variables的名称包含在名为strLine
的stringstrLine
。
使用Dictionary<string, Variable>
。
例如
var vartable = new Dictionary<string, Variable>(); vartable[strLine] = new Variable(input);
C#4.0,使用dynamic
对象:
dynamic d = new ExpandoObject(); ((IDictionary<string, object>)d)["MyProperty"] = 5; int val = d.MyProperty; // 5
不,但可以使用Dictionary<string, Variable>
,然后可以通过引用的名称引用每个variables。
你不能这样做,但你要做的是乞求一个字典使用:
Dictionary<object, object> d = new Dictionary<string, object>(); d.Add("Variable1", value1); d.Add("Variable2", value2); d.Add("Variable3", value3);
试试这个,用户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); } } }
在编译时应该知道variables名称。 如果您打算在运行时dynamic填充这些名称,则可以使用List<T>
。
var variables = List<Variable>(); variables.Add(new Variable { Name = input1 }); variables.Add(new Variable { Name = input2 }); ...
不可以。但是,您可以将它们加载到Dictionary对象中。 这允许您仍然使用一个名称来引用它们(有点),这比使用Index更容易一些,就像使用Array或ArrayList一样。
我会使用某种键控集合,如散列表,字典或具有名称的结构列表。 然后您可以通过名称引用该variables:
var value = variableDictionary["MyVariableName"]; var value = variableHashtable["MyVariableName"]; var value = variableList.First(x=>x.Name == "MyVariableName");
没有其他方法来dynamic地“命名”一个variables。
不需要使用数组,否则你不能这样做。