如何使用for()循环在C#中执行值分配操作?

时间:2019-07-17 09:04:05

标签: c#

我的C#程序中有一个DataModel类,如下所示。

    public class DataModel
    {
        public string num1 { get; set; }
        public string num2 { get; set; }
        public string num3 { get; set; }
        public string num4 { get; set; }
        public string num5 { get; set; }
    }

我需要如下进行值分配。左侧的num1..num5TextBlock。右侧data.num1..data.num5已在另一个页面中初始化,并将其分配给TextBlock的Text属性。如何使用for()循环来实现?谢谢!

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.Parameter != null && e.Parameter is DataModel)
        {
            var data = e.Parameter as DataModel;
            string str;

            num1TextBlock.Text = data.num1;
            num2TextBlock.Text = data.num2;
            num3TextBlock.Text = data.num3;
            num4TextBlock.Text = data.num4;
            num5TextBlock.Text = data.num5;

很抱歉,描述不清楚。已更新,请再次检查。谢谢!

更多: 例如,如果数组计数未固定为5(最小计数为5),我们从服务器中提取数据,然后我们知道需要多少数据来进行分配(初始化)。怎么做?

3 个答案:

答案 0 :(得分:1)

将TextBlocks放置到数组中。

var nums = new TextBlock[] {num1, num2, num3, num4, num5 };

重构您的DataModel使其也使用数组而不是五个字段,就像这样:

public class DataModel
{
   public string[] nums {get; set;} 
} 

那么您可以做:

for(int i = 0; i < data.nums.Length; i++)
{
    nums[i].Text = data.nums[i];
}

当然,您应该在运行循环之前检查数据字段的数量和TextBlocks的数量是否匹配,以避免任何IndexOutOfRange异常,

答案 1 :(得分:0)

如下所示:

    TextBlock[] blocks = new[]{num1, num2, num3, num4, num5};
    int[] values = new[]{data.num1, data.num2, data.num3, data.num4, data.num5};
    for (int i = 0; i<5;++i)
       blocks[i].Text = values[i].ToString();

答案 2 :(得分:0)

您不能真正在C#中像这样循环。您可以使用数组,或者甚至可以使用字典。字典确实很好地映射到了javascript对象中,

var dataModel = new Dictionary<string, string>()
{
    { "num1", "string1" },
    { "num2", "string2" },
    { "num3", "string3" },
    { "num4", "string4" },
    { "num5", "string5" },
};

很容易映射到此:

{
    num1: "string1",
    num2: "string2",
    num3: "string3",
    num4: "string4",
    num5: "string5"
}

但是,您可以使用Reflection获取DataModel的所有属性,对其进行迭代,并按名称将其与另一个模型的属性进行匹配,然后复制值,但我不建议这样做。