Как динамически называть переменные в C#?
есть ли способ динамически называть переменные?
что мне нужно сделать, это взять список имен переменных из входного файла и создать переменные с такими именами. Возможно ли это?
что-то типа:
Variable <dynamic name of variable here> = new Variable(input);
предположим, что у меня уже есть Variable
класс позаботился, и имя переменной содержится в строке с именем strLine
.
9 ответов
использовать 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>
, а затем вы можете ссылаться на каждую переменную по ее имени в кавычках.
вы не можете этого сделать, но то, что вы хотите сделать, это умолять об использовании словаря:
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);
}
}
}
имена переменных должны быть известны во время компиляции. Если вы намерены динамически заполнять эти имена во время выполнения, вы можете использовать List<T>
.
var variables = List<Variable>();
variables.Add(new Variable { Name = input1 });
variables.Add(new Variable { Name = input2 });
...
нет. Вы можете загрузить их в словарь однако объект,. Это позволяет вам по-прежнему ссылаться на них (несколько) с помощью имени, что немного проще, чем с помощью индекса, как с массивом или ArrayList.
Я бы использовал какую-то коллекцию ключей, например хэш-таблицу, словарь или список структур с именем. Затем вы можете обратиться к переменной по имени:
var value = variableDictionary["MyVariableName"];
var value = variableHashtable["MyVariableName"];
var value = variableList.First(x=>x.Name == "MyVariableName");
нет другого способа динамически "назвать" переменную.