我有這樣的λ表達式:Lambda表達式的任何返回錯誤值
if (!myList.Any(x => x.name == "example" && x.articleNumber == "1"))
{
}
else
{
}
myList中含有由具有這些特性的類的對象:articleNumber,名稱和數量。
而這進入了if而不是在else中,雖然有一個名爲「example」和articleNumber「1」的對象。爲什麼會發生?
我有這樣的λ表達式:Lambda表達式的任何返回錯誤值
if (!myList.Any(x => x.name == "example" && x.articleNumber == "1"))
{
}
else
{
}
myList中含有由具有這些特性的類的對象:articleNumber,名稱和數量。
而這進入了if而不是在else中,雖然有一個名爲「example」和articleNumber「1」的對象。爲什麼會發生?
唯一的原因,我可以看到的是,有一個與name=="example"
和articleNumber=="1"
沒有元素。請注意,==
運算符在C#中區分大小寫,並且可能在某處存在空格。
然後你就可以使用這個與Trim
比較不區分大小寫,並刪除空白頻段:
if (!myList.Any(x => x.name.Trim().Equals("example", StringComparison.OrdinalIgnoreCase)
&& x.articleNumber == "1"))
{
}
else
{
}
你也應該考慮到的articleNumber
的類型更改爲int
,因爲它是一個數字。
您的lamda之前您知道!
是嗎?
你問if語句是
如果myList中不包含任何值,其中名字爲例子,文章編號爲1
我不知道這是否幫助,但也許它更容易如果您提供更多關於您想要完成聲明的信息,請回答。
我敢肯定,該列表不包含您認爲它的條目。在if行上設置調試標記,然後檢查該列表以查看它包含的內容。你會發現該條目不存在。請記住,字符串也是區分大小寫的,所以如果名稱確實是Example,它將不匹配。
我做到了,它確實如此。 –
它至少不包含**。我確定*任何*都不會被吸收掉。 –
所以最可能的結果看起來是一樣的,在文本「例子」中有一個問題,或者兩個字符串之一中的某個空格。 –
你的邏輯沒有錯,但你counld嘗試?
if (myList.Where(x => x.name == "example").Where(x=> x.articleNumber == "1").Count() > 0)
{
}
else
{
}
或刪除所有的空格和差異在套管
if (!myList.Any(x => x.name.Trim().ToLower() == "example" && x.articleNumber.Trim().ToLower() == "1"))
{
}
else
{
}
爲什麼你會將if語句複雜化以產生完全相同的結果? –
Any的定義: 確定序列的任何元素是否存在或滿足條件。
因此,對於序列中的每個元素,確定謂詞是否與您的表達式匹配。如果列表中的任何元素的名稱爲「榜樣」和articleNumber如果列表中沒有元素的名稱爲「榜樣」和1
!myList.Any(x => x.name == "example" && x.articleNumber == "1")
將返回true
myList.Any(x => x.name == "example" && x.articleNumber == "1")
將返回true文章編號1.
您的列表可能包含一些您不期望的值。
嘗試用||
更換&&
,看看你會得到什麼:
var v = myList.Where(x => x.name == "example" || x.articleNumber == "1").ToList();
只是爲了看看有什麼有 。
myList的內容是什麼? –
如果你**沒有**名稱* example和acticleNumber * 1 *的條目*它**應該**進入if塊。 –
因爲'myList'的元素不匹配謂詞嗎?如果你認爲*應該匹配*,我會再次檢查。 (調試器會在這裏成爲你的朋友,如果你願意的話,你可以遍歷列表) –