c# - 比较请求中的属性是否具有相等的值 C#
问题描述
我想比较请求中的属性是否具有相同的值。我有以下 json 用于通过 PostMan 请求。
“request”:[ {
“Id”: “1234567”,
“Position”: “1”,
“IsSet”: true
},
{
“Id”: “1234587”,
“Position”: “1”,
“IsSet”: true
},
]
在代码中,我想比较属性 Position 和 IsSet 在请求中是否具有相同的值 foreach id。如果他们不抛出错误。
public class Info
{
public string Id {get; set;}
public string Position {get; set;}
public bool IsSet {get; set;}
}
我有一个名为 Validate 的方法来验证这些属性。
public class Validate(Info context)
{
foreach (var item in context)
{
// what code should check this
}
}
解决方案
您可以使用 LINQSelect
并Distinct
为此目的。
这是一个示例"Validate"
方法。
List<Test> objs = new List<Test>()
{
new Test(){ Position = "random position 1", IsSet = true, Id = 123 },
new Test(){ Position = "random position 2", IsSet = true, Id = 123 },
new Test(){ Position = "random position 3", IsSet = true, Id = 123 }
};
if(objs.Count() > 1){
var query = objs.Select(p => new { p.Id, p.IsSet }).Distinct();
var allTheSame = query.Count() == 1;
Console.WriteLine(allTheSame);
}else{
Console.WriteLine("Nothing To Compare Against");
}
}
这里的逻辑是检查列表中是否有超过 1 个项目 - 只是为了让我们知道有一些东西可以比较这些值。
如果不止一个,请选择要匹配对象的属性并在其上调用 distinct。
然后我们得到不同值的计数,如果它们都匹配,我们将始终从query.Count()
布尔检查中返回 1。
此时如果allTheSame
是false
,您可以抛出错误而不是Console.WriteLine
在第二个Console.WriteLine
中,您始终可以返回 true,因为没有什么可比较的,使其足够明显。
这是一个示例dotNetFiddle。
推荐阅读
- javascript - 使用 Nightwatch 框架的 url() 函数时,onbeforeunload 事件不显示警报
- reactjs - 卸载时使用 useEffect 调度
- mysql - MySQL - 选择最高薪水
- javascript - Vue.js globalEventBus 从窗口对象捕获事件?
- python - PyQtGraph & OpenGL:如何在两个坐标之间创建一个球体?
- amazon-web-services - aws ec2 ssh 在创建实例的映像后失败
- jquery - 如何删除 DataTable 行并保持分页
- javascript - JS同步api请求
- ibm-cloud - 无法使用 Watson Assistant API v2 修改 user_defined 上下文
- react-native - 使用 React Native 在 LinkedIn 上分享帖子