C# 在具有相似名称的属性上循环

C# 在具有相似名称的属性上循环,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我有一个对象列表,其中大多数属性的差异只是数量的增加 名字 姓 星期一 周2 第3周 第4周 第5周 第6周 等等 我希望能够在表格中显示它们的值,但仅限于选定的金额。。。假设仅显示前4周 因此,我必须在每一周都发表一次声明。我试图循环这个对象,但据我所知,我不能增加属性的名称。有没有一种方法可以在名称以周%开头的对象上循环。。。。还是增加周数 我返回的“最终对象列表”包含两个列表。 List<WeekViewModel> results = new List<WeekVi

我有一个对象列表,其中大多数属性的差异只是数量的增加

名字 姓 星期一 周2 第3周 第4周 第5周 第6周 等等

我希望能够在表格中显示它们的值,但仅限于选定的金额。。。假设仅显示前4周

因此,我必须在每一周都发表一次声明。我试图循环这个对象,但据我所知,我不能增加属性的名称。有没有一种方法可以在名称以周%开头的对象上循环。。。。还是增加周数

我返回的“最终对象列表”包含两个列表。

  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;i你能在这里添加你的代码吗?看看反思。我已经在问题中添加了我的代码,不知道如何实现你在我的案例中提到的方法。你能给我一些关于如何使用反射的提示吗?关于如何使用反射@(data.GetType().GetProperty(“week”+i).GetValue(data,null))有很多例子。这个部分对我有用,但它返回整个对象,我需要它返回。这个对象的简称
GetValue(…)
返回
对象
,您需要将其强制转换为正确的类型,以便访问其
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>

                }