以下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/

10-10 10:04