首页 > 解决方案 > 比较请求中的属性是否具有相等的值 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
    }
}

标签: c#dotnet-httpclient

解决方案


您可以使用 LINQSelectDistinct为此目的。

这是一个示例"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。

此时如果allTheSamefalse,您可以抛出错误而不是Console.WriteLine

在第二个Console.WriteLine中,您始终可以返回 true,因为没有什么可比较的,使其足够明显。

这是一个示例dotNetFiddle


推荐阅读