以下lambda statemement返回null,当我希望它会返回字符串值时。
var countryCode = AddressComponents
.Where(x => x.AddressType == AddressType.Country)
.Select(x => x.ShortName)
.SingleOrDefault();
现在我要查询的当前实例的AddressType属性包含以下数据:
AddressType.Political | AddressType.Country
因此它包含两个值。
当然,我的lambda将不起作用,因为country的值(假定为1)!=政治按位或Country的值(假定为1 | 2 == 3)。
有任何想法吗?
我担心我需要吃点真正令人讨厌的东西,例如...
((AddressTypes & AddressType.Country) == AddressType.Country)
..想法?
最佳答案
.NET 4.0具有 Enum.HasFlag
方法:
x => x.AddressType.HasFlag(AddressType.Country)
如果您不在.NET 4.0上,那么按位的
AND
是一个不错的选择。如果您不喜欢这种模式,请查看UnconstrainedMelody,它具有用于此目的的扩展方法。另外,你也可以自己写;这个问题可能会有所帮助-
Anyone know a good workaround for the lack of an enum generic constraint?
关于.net - 如何使用linq检查标志/按位枚举是否包含类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3878915/