c# - 如何在 C# 中创建字段名称的动态总计?
问题描述
我的用户可以创建任意数量的“活动”对象。我需要编写一些代码来遍历每个“Activity”对象并根据每个“ActivityType”字段计算“Hours”字段。如果任何字段的总小时数超过 60,则会引发错误。(可选:显示导致错误的 ActivityType)
例子:
{
"Activity1": {
"ActivityType": "Swimming",
"Hours": 40,
},
"Activity2": {
"ActivityType": "Cycling",
"Hours": 20,
}
"Activity3": {
"ActivityType": "Cycling",
"Hours": 50,
}
"Activity4": {
"ActivityType": "Baseball",
"Hours": 20,
}
"Activity5": {
"ActivityType": "Baseball",
"Hours": 20,
}
}
游泳总数:40 自行车总数:70 <- 验证错误消息棒球总数:40
我的代码以前是按人计算的,但现在应该按活动计算。此代码不会为每个 Activity 保留一个计数,而是为页面上的所有 Activity 保留一个计数。所以“foreach (var person in Persons)”是可以改变的。
foreach (var person in Persons.Where(x => x.IsActive == true))
{
if (Activities.Where(x => x.ActivityType > 0).Sum(Y => Y.Hours) > 60)
validations.Add(string.Format("Each activity may only have up to 60 hours per week."));
}
)
每个 Activity 应该有一个总数,而不是 150 个。
解决方案
你的意思是这样的,它使用分组吗?
public class Person
{
public bool IsActive { get; set; }
public List<Activity> Activities { get; set; }
public string Name { get; set;}
}
public class Activity
{
public string ActivityType { get; set; }
public uint Hours { get; set; }
}
public class Example
{
private const uint Threshold = 60;
public void CheckHours(IEnumerable<Person> persons)
{
foreach (var person in persons)
{
var grouped = (from a in person.Activities
group a by a.ActivityType
into groupedActivities
select new { Activity = groupedActivities.Key, TotalHours = groupedActivities.Sum(g => g.Hours)}).ToList();
foreach (var group in grouped)
{
if(group.TotalHours > Threshold)
throw new Exception($"Activity {group.Activity} for person {person.Name} has exceeded the threshold!");
}
}
}
}
CheckHours 方法将为总小时数 > 60 的人的任何活动引发异常。
推荐阅读
- c++ - 我的代码中是否存在内存泄漏?用 valgrind 检查
- excel - 使用单独的库存和发行表在谷歌表中维护库存表
- php - 在 PHP Navbar 中添加下拉菜单
- android - 构建一个非常简单的移动应用程序(没有移动开发经验)
- routing - 在 Sapper 中作为模态路由
- kotlin - 将多个 Kotlin 流合并到一个列表中,而无需等待第一个值
- postgresql - Postgresql 触发器行为怪异
- excel - 从 .txt 文件中提取特定值并放入 excel
- amazon-s3 - kafka 连接到 s3 无法启动
- python-3.x - Python替换字典中的值(在类对象中设置)失败:TypeError:'annotation'对象不支持项目分配