C# linq不等于(!=)的任意运算符
我很难理解linq any操作符。让我们考虑下面的代码片段(使用VS 2010和.NET 4)< /P> 这正是我所期待的。但是,如果我将相等运算符(C# linq不等于(!=)的任意运算符,c#,.net,linq,list,C#,.net,Linq,List,我很难理解linq any操作符。让我们考虑下面的代码片段(使用VS 2010和.NET 4)< /P> 这正是我所期待的。但是,如果我将相等运算符(==)更改为不相等(!=),我会得到这个结果 a b c d 这不应该吗 a d 如果我将if条件更改为 if(!(secondSample.Any(data=> data.ToString() == s))) 我明白了 所以我的问题是,我是否以错误的方式解释了Any运算符?不应该 if(secondSample.Any(data=&g
==
)更改为不相等(!=
),我会得到这个结果
a
b
c
d
这不应该吗
a
d
如果我将if条件更改为
if(!(secondSample.Any(data=> data.ToString() == s)))
我明白了
所以我的问题是,我是否以错误的方式解释了Any运算符?不应该
if(secondSample.Any(data=> data.ToString() != s))
当
secondSample
中的值不在sample中时,求值为true。当更改为时,求值为All,而不是Any=
if(secondSample.All(data=> (data.ToString() != s)))
当你否定一个表达式时,内部或变成了and:“A或B”的否定变成了“不是A也不是B”。当你改变为时,它是全部,不是任何=
if(secondSample.All(data=> (data.ToString() != s)))
当你否定一个表达式时,内部or变成了and:“A或B”的否定变成了“不是A也不是B”。如果你想使用!=运算符,您希望得到
ad
,然后应使用All
而不是Any
:
if(secondSample.All(data=> data.ToString() != s))
Console.WriteLine(s);
解释secondSample.Any(data=>data.ToString()!=s)
将为真,如果secondSample
中只有一个元素不等于给定的数据项(在您的示例
列表中),因此在您的情况下它将始终为真,并且您可以看到所有元素都写入控制台
更好的解决方案有两个数组A和B,如果您想要使用LINQ的那些A元素不在B中,您可以尝试除了
,如果您正在寻找公共元素,您可以尝试相交
:
List<string> A = new List<string> { "a", "b", "c", "d" };
List<string> B= new List<string> { "b", "c" };
var AnotInB = A.Except(B).ToList(); //a, d
var AInB = A.Intersect(B).ToList(); //b, c
List A=新列表{“A”、“b”、“c”、“d”};
列表B=新列表{“B”,“c”};
var AnotInB=A.Except(B.ToList()//a、 d
var AInB=A.Intersect(B.ToList()//公元前
如果您想使用!=运算符,您希望得到ad
,然后应使用All
而不是Any
:
if(secondSample.All(data=> data.ToString() != s))
Console.WriteLine(s);
解释secondSample.Any(data=>data.ToString()!=s)
将为真,如果secondSample
中只有一个元素不等于给定的数据项(在您的示例
列表中),因此在您的情况下它将始终为真,并且您可以看到所有元素都写入控制台
更好的解决方案有两个数组A和B,如果您想要使用LINQ的那些A元素不在B中,您可以尝试除了
,如果您正在寻找公共元素,您可以尝试相交
:
List<string> A = new List<string> { "a", "b", "c", "d" };
List<string> B= new List<string> { "b", "c" };
var AnotInB = A.Except(B).ToList(); //a, d
var AInB = A.Intersect(B).ToList(); //b, c
List A=新列表{“A”、“b”、“c”、“d”};
列表B=新列表{“B”,“c”};
var AnotInB=A.Except(B.ToList()//a、 d
var AInB=A.Intersect(B.ToList()//公元前
任何操作符基本上都会问“集合中是否有回答谓词的元素”。在您的例子中,它是存在的,因此它是正确的输出。任何操作符基本上都会问“集合中是否有回答谓词的元素”。在您的情况下,它是存在的,因此它是正确的输出。!=在任何情况下,一切都是不平等的
所以你读到如果有不相等的,那么你可以打印。
猜猜看,你总是有至少一个不相等的。这就是你得到所有答案的原因
在你的另一个陈述中,你说:不相等的那一个你可以打印
还有更清楚的吗?!=在任何情况下,一切都是不平等的 所以你读到如果有不相等的,那么你可以打印。 猜猜看,你总是有至少一个不相等的。这就是你得到所有答案的原因 在你的另一个陈述中,你说:不相等的那一个你可以打印 有更清晰的吗?存在使用
List<string> sample = new List<string> { "a", "b", "c", "d" };
List<string> secondSample = new List<string> { "b", "c" };
foreach (string s in sample)
{
if (!secondSample.Exists(data => data.ToString() == s))
Console.WriteLine(s);
}
List sample=新列表{“a”、“b”、“c”、“d”};
List secondSample=新列表{“b”,“c”};
foreach(示例中的字符串s)
{
如果(!secondSample.Exists(data=>data.ToString()==s))
控制台。写入线(s);
}
存在使用
List<string> sample = new List<string> { "a", "b", "c", "d" };
List<string> secondSample = new List<string> { "b", "c" };
foreach (string s in sample)
{
if (!secondSample.Exists(data => data.ToString() == s))
Console.WriteLine(s);
}
List sample=新列表{“a”、“b”、“c”、“d”};
List secondSample=新列表{“b”,“c”};
foreach(示例中的字符串s)
{
如果(!secondSample.Exists(data=>data.ToString()==s))
控制台。写入线(s);
}
如果你解释为什么任意运算符是错误的选择,你的答案会更好。如果你解释为什么任意运算符是错误的选择,你的答案会更好。你的解释也很好。简明扼要。我只能标一个作为答案。否则我会把两个都标上你的解释也很好。简明扼要。我只能标一个作为答案。否则我会把两个都标上