簡體   English   中英

在linq語句中使用類型別名會生成錯誤

[英]Using a type alias in a linq statement is generating an error

由於某種原因,這個聲明工作得很好:

vms.Where(vm => vm.MessageType == ValidationMessage.EnumValidationMessageType.Warning)

但是如果在類的頂部,我定義了一個別名(以節省空間):

using MsgType = ValidationMessage.EnumValidationMessageType;

然后得到的代碼行:

vms.Where(vm => vm.MessageType == MsgType.Warning)

給我一個錯誤:

在此輸入圖像描述 “委托' System.Func<ValidationMessage, int, bool> '不帶1個參數”。 奇怪的是,這不是我正在使用的代表。 我正在使用.Where<>()的' System.Func<ValidationMessage, bool> '重載 - 與我不使用別名時相同。

請注意,別名正在使用的其他地方工作正常,只有在這些linq委托中它才會中斷。 為什么會這樣?

在嘗試運行我的程序時,所有這些錯誤都被清除,並且出現了一個錯誤,抱怨我的類型別名聲明。

問題是ValidationMessage.EnumValidationMessageType類型存在於名稱空間中,該名稱空間已被進一步聲明:

using WPF.Utilities.ObjectModel;
using MsgType = ValidationMessage.EnumValidationMessageType;

當然,根據先前的命名空間包含,C#無法確定類型的來源,我必須完全拼寫出來:

using WPF.Utilities.ObjectModel;
using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType;

一旦我這樣做,另一個問題就消失了。

我想我只是因為linq語句中出現的奇怪錯誤而陷入困境,再加上VS沒有顯示任何錯誤,我在上面的三元運算符中使用了別名,我沒有看到那里明顯的錯誤。

感謝提示nemesv - 我應該知道比信任設計時編譯器更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM