C# 在具有相似名称的属性上循环
我有一个对象列表,其中大多数属性的差异只是数量的增加 名字 姓 星期一 周2 第3周 第4周 第5周 第6周 等等 我希望能够在表格中显示它们的值,但仅限于选定的金额。。。假设仅显示前4周 因此,我必须在每一周都发表一次声明。我试图循环这个对象,但据我所知,我不能增加属性的名称。有没有一种方法可以在名称以周%开头的对象上循环。。。。还是增加周数 我返回的“最终对象列表”包含两个列表。C# 在具有相似名称的属性上循环,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我有一个对象列表,其中大多数属性的差异只是数量的增加 名字 姓 星期一 周2 第3周 第4周 第5周 第6周 等等 我希望能够在表格中显示它们的值,但仅限于选定的金额。。。假设仅显示前4周 因此,我必须在每一周都发表一次声明。我试图循环这个对象,但据我所知,我不能增加属性的名称。有没有一种方法可以在名称以周%开头的对象上循环。。。。还是增加周数 我返回的“最终对象列表”包含两个列表。 List<WeekViewModel> results = new List<WeekVi
List<WeekViewModel> results = new List<WeekViewModel>();
results.AddRange(ReportData.Select(x =>
new WeekViewModel()
{
full_name = x.full_name,
location = x.location,
...
week1 = Category.Where(c => c.Color_code == x.week1).FirstOrDefault(),
week2 = Category.Where(c => c.Color_code == x.week2).FirstOrDefault(),
week3 = Category.Where(c => c.Color_code == x.week3).FirstOrDefault(),
}));
我基本上只需要每个星期的简称。不知道如何使用C.Evenhui的建议。。。有人能告诉我如何在这里使用反射吗?我不熟悉这个概念我假设您的
myObject
中的所有Week
属性都具有相同的数据类型,为了简单起见,我在这里使用了string
:
您可以事先创建一个字典
:
Dictionary<int, Func<myObject, string>> weekMapping = new Dictionary<int, Func<myObject, string>>();
weekMapping[1] = (o) => o.Week1;
weekMapping[2] = (o) => o.Week2;
您也可以选择使用反射,因为您可以按名称访问属性,但这通常会使代码更复杂,可读性更低。我认为您必须使用反射提取属性名称,并找到匹配的属性名称,然后自己排序。 创建一个方法,用于查找名称与(regex)模式匹配的类型的公共实例属性。 请记住,如果您按字母顺序排序,则第10周将在第2周之前。
将数字部分解析为int并按int排序。我决定在我的视图中使用反射,效果非常好
@for (var i = 1; i < Model.numberOfWeeksx; i++)
{
var xx = data.GetType().GetProperty("week" + i).GetValue(data, null);
var yy = xx.GetType().GetProperty("Short_name").GetValue(xx, null);
<td>@yy</td>
}
(变量i=1;iGetValue(…)
返回对象
,您需要将其强制转换为正确的类型,以便访问其short\u name
属性。
myObject o = ...;
for (int week = 1; week <= 2; week++)
{
string weekValue = weekMapping[week](o);
}
@for (var i = 1; i < Model.numberOfWeeksx; i++)
{
var xx = data.GetType().GetProperty("week" + i).GetValue(data, null);
var yy = xx.GetType().GetProperty("Short_name").GetValue(xx, null);
<td>@yy</td>
}