2013-02-21 60 views
4

我剛剛在LINQ方法鏈中遇到了意外賦值表達式。這導致在foreach循環中使用的枚舉器(IEnumerable)永遠不會進入循環塊,而是遍歷所需的集合項。下面是用於創建迭代器中的故障的表達的一個簡化的例子:C#LINQ方法鏈中賦值語句的編譯器警告?

itemCollection.Where(theItem => theItem.status = false); 

顯然,這是比較容易抓到用這樣的簡單的LINQ方法鏈,但在更復雜的情況,特別是那些涉及多個迭代或迭代由複雜的課程提供服務,它可能是一個真正的時間浪費追逐錯誤。是否有一個Visual Studio設置標記LINQ方法鏈中的賦值?

+6

簡單的解決方法:從不比較'false'(和'true'),使用'theItem =>!theItem.status'(和'theItem => theItem.status')。 – svick 2013-02-21 00:32:07

+0

它編譯?你不提供Func ,因爲你沒有返回布爾值... – 2013-02-21 01:52:58

+1

@LuisFilipe賦值返回賦值,所以lambda * *返回'bool'。 – svick 2013-02-21 01:55:40

回答

1

ReSharper將標記爲「賦值不在任何表達式中使用」。 正如Virtlink所指出的那樣,Resharper在賦值給對象字段時不會給出錯誤。我不認爲有VS設置,但我很確定你可以爲此寫一個插件。

+2

你確定嗎?該值被分配給一個對象字段,我懷疑Resharper會爲此提出警告。整個表達式的結果在lambda表達式中使用。所以,我沒有ReSharper,但我懷疑它不會給予特別的警告。 – Virtlink 2013-02-21 00:36:02