[英]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.