我的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..num5
是TextBlock
。右侧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),我们从服务器中提取数据,然后我们知道需要多少数据来进行分配(初始化)。怎么做?
答案 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的所有属性,对其进行迭代,并按名称将其与另一个模型的属性进行匹配,然后复制值,但我不建议这样做。