我有一个布尔数组,如下所示
bool[] responses = new bool[] {true, false, true};和两个如下所示的类:
public class Person {
  public IList<PersonDetail> PersonDetails
}
public class PersonDetail {
  public bool   Correct { get; set; }
}
PersonDetails
 >> PersonDetail[0].correct = true
 >> PersonDetail[1].correct = true
 >> PersonDetail[2].correct = false有没有一种简单的方法可以比较它们,看看它们的真/假是否相等?我尝试使用c# .SequenceEqual,但我不知道如何将PersonDetail类中的数据放入序列xxx中,以便与响应进行比较。
这是我到目前为止所知道的:
var equal = responses.Select(bool.Parse).SequenceEqual( xxx );我需要做的是比较以下内容:
responses[0] == PersonDetail[0].correct and
responses[1] == PersonDetail[1].correct and
responses[2] == PersonDetail[2].correct 因此,responses[x]中的true应该与PersonDetail[x]中的true匹配,而responses[x]中的false应该与PersonDetail[x]中的false匹配
发布于 2011-06-15 16:15:31
不是100%确定你的代码,但也许:
var equal = responses.SequenceEqual(Person.PersonDetails.Select(PD => PD.correct);
发布于 2011-06-15 16:14:10
你的代码并不是很清晰,但我想你会想要做以下事情:
var isEqual = responses.SequenceEqual(PersonDetail.Select(p=>p.Correct))发布于 2011-06-15 16:41:42
如果我没看错你的问题,这个LINQ会按照你的要求去做。我不确定它是否比一个简单的foreach循环更具可读性,但这不是重点!
public class Person 
{
  public IList<PersonDetail> PersonDetails;
}
public class PersonDetail 
{
  public bool   Correct;
}
void Main()
{
    bool[] responses = new bool[] {true, false, true};
    Person p = new Person();
    p.PersonDetails = new List<PersonDetail>();
    p.PersonDetails.Add(new PersonDetail(){Correct = true});
    p.PersonDetails.Add(new PersonDetail(){Correct = true});
    p.PersonDetails.Add(new PersonDetail(){Correct = false});
    //bool allGood = p.PersonDetails.Select((pd, index) => pd.Correct == responses[index]).All(x => x==true);
    bool allGood = responses.SequenceEqual(p.PersonDetails.Select(x => x.Correct));
    allGood.Dump(); // LINQpad extension
}还为时过早,我忘记了SequenceEquals,它以一种更具可读性的方式做同样的事情。代码已更改,以匹配其他所有人已经回答的内容...
https://stackoverflow.com/questions/6354813
复制相似问题