是否可以根据用户输入动态命名变量?

时间:2016-08-10 23:49:32

标签: c# arrays list dynamic

我最近开始使用C#开发一个项目,该项目要求用户根据需要创建尽可能多的类实例。我想过两种不同的方法来解决这个问题。

1:使用包含类所拥有信息的字符串数组列表。 我的意思是,当他们创建类的实例时,数据会转到列表中,以便我可以重复使用相同的变量名。

// Initiating the class
dataSet1D currDataSet = new dataSet1D();
dataSet1D.name = txtName.Text;
dataSet1.length = Int32.Parse(txtIndex.Text);

// Creating the list of arrays
List<string[]> arrayList = new List<string[]>();
string[] strArray = new string[2];
strArray[0] = "name";
strArray[1] = "lengthAsString";
arrayList.Add(strArray);

(这只是一些快速的模拟代码,我显然会在我的实际项目中使用更好的变量名称)

2:我可以使用动态命名的变量 如果他们输入他们想要的名称,我可以将实例命名为。

dataSet1D <dynamically named variable name> = new dataSet1D();

3 个答案:

答案 0 :(得分:2)

您可以创建一个字典,将“变量”的名称映射到实际的calss实例,或者您可以创建一个包含所有实例的List,并且在这种情况下它们具有索引而不是名称。

答案 1 :(得分:0)

如果你需要很多1个类的实例,你可以拥有该类的列表。 像这样:

class MyClass
{
   public string Name {set;get;}
   // property2 , etc
}

var myList = new List<MyClass>();
myList.Add(new MyClass());

除此之外,我不得不提到变量名与运行时无关。在构建代码时,它们都将更改为指向包含数据的空间的指针。

变量名只是程序员让他们使用对象的处理程序

答案 2 :(得分:0)

您可以创建向该类添加字符串属性,该属性将保存用户为每个对象指定的名称。然后,在创建每个对象的新实例时,将其添加到List中,就像其他人建议的那样。最后,当您需要通过用户定义的名称访问实例时,请使用LINQ表达式来检索它。

public class MyClass
{
    public string UserDefinedName { get; set; }
    public int Length { get; set; }
    ... Other member variables
}

public List<MyClass> UserCreatedObjects { get; set;}

然后获取一个名为的实例,说&#34; my_object_1&#34;使用LINQ:

var theInstance = UserCreatedObjects.Where(o => o.UserDefinedName == "my_object_1").FirstOrDefault();