2013-10-23 46 views
6

所以目前有一段代碼,它看起來像這樣的時候造成了一個奇怪的錯誤...添加lambda表達式試圖編譯

string name = GetValues(sequenceOfCodes, 0, IDtoMatch, 1)[0]; 

我剛剛更新了下面一行是

string name = sequenceOfCodes 
        .Select(x => x[0]) 
         .Where(x => x == IDtoMatch) 
          .FirstOrDefault(); 

哪個應該有希望返回相同的東西。

sequenceOfCodes是List<List<String>>IDtoMatch也是string

所以希望這一切都很好。

但是當我去編譯,我得到一個奇怪的錯誤

The type 'System.Windows.Forms.ComboBox' is defined in an assembly 
that is not referenced. 

You must add a reference to assembly 'System.Windows.Forms, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089' 

當我把我的新添加的代碼遠離它編譯罰款和運行......那麼,爲什麼只是因爲我已經添加了一個lambda expression它是否認爲我需要參考System.Windows.Forms.ComboBox

只是爲了說明這是一個控制檯應用程序。 不是一個winforms應用程序。

----------- ---------- UPDATE

好了,我已經發現引用的一個不引用System.Windows.Forms的,我實在是讓人失望,因爲這是核心代碼,不應該有這樣的:(依賴

但是我仍然不知道爲什麼錯誤之前沒有出現,直到後,我加了我的代碼行。

要確認,如果我刪除我的代碼,我可以關閉VS,並重新啓動並重建,一切都很好。 如果我添加我的代碼行並關閉並重新啓動等錯誤將r消失在重建。

對我來說很奇怪的錯誤。

謝謝你們所有的幫助

+1

@James爲什麼x == IDtoMatch不正確? – Neel

+2

不,他不是,因爲IDtoMatch是一個字符串,而不是一個類型。 – dcastro

+0

@James'x == IDToMatch'是正確的。 –

回答

1

你提到的其他項目的一個不參考窗口形式。我的猜想是這個項目還聲明瞭一些擴展方法(範圍在給定的using指令),編譯器需要探索哪些超負荷解決方法 - 大概是WhereSelectFirstOrDefault方法;意思是:它不能決定它們的重載是System.Linq.Enumerable之一,直到它將它與其他候選者進行比較,並且如果不能理解在競爭方法簽名中使用的類型,就不能這樣做。

或換句話說:是否有SelectWhereFirstOrDefault自定義擴展方法,提到ComboBox

+0

嗯,我不能確定這一點,但也許這可能是這種情況... –