根据UI中的变量动态更新变量

时间:2016-08-08 20:49:01

标签: c# arrays

我在C#代码中初始化了以下数组。 data1,data2,data3在代码中手动写入,以将其分配给' row'如下图所示。

string[] row = new string[] { type, data1, data2, data3, shares };

我想动态分配,而不是手动编码。为了确保这一点,我从UI获取变量的值并将其分配给这样的C#变量。

var change_data = "data1, data2"

例如,我应该能够更改变量' row'如下:

 string[] row = new string[] { type, data1, data2, shares };

现在是另一个例子。

var change_data = "data1";

这也应该如下更新行。

string[] row = new string[] { type, data1, shares };

2 个答案:

答案 0 :(得分:1)

您不想使用变量'将名称命名为字符串。相反,你可以使用字典:

// setup
var fields = new Dictionary<string,string>() {
    {"data1", "data 1 value"},
    {"data2", "data 2 value"},
    {"data3", "data 3 value"},
};

// get data from UI
var change_data = "data1, data2";
var change_names = change_data.Split(',').Select(t=>t.Trim());

// or just this, if you can get it from your UI:
// var change_names = new [] {"data1", "data2"};

// build new row based on change_names
var row = new List<string>();
row.Add(type);
row.AddRange(change_names.Select(t=>fields[t]));
row.Add(shared);

答案 1 :(得分:1)

正如评论中所提到的,由于数组具有固定长度,因此使用某种集合会更好。 Blorgbeard的回答使用Dictionary<K,V> - 另一种方法是使用List<T>

你可以做的是将一个List包装在一个方法中,用你的第一个值开始你的列表,插入输入值,并添加最终值:

假设下面input的值为data1, data2

public static List<string> CreateRowData(string input) {
    var returnList = new List<string> { "type" };

    var inputs = input.Split(',').Select(s => s.Trim());

    foreach (var item in inputs) {
        returnList.Add(item);
    }

    returnList.Add("shares");

    return returnList;
}

上述转变:

//type
//data1
//data2
//shares