【发布时间】:2014-06-13 11:06:11
【问题描述】:
我正在尝试以此处指定的方式实现功能:
但是,我正在尝试将其作为通用方法用作扩展:
public static TEnum? Merge<TEnum>(this IEnumerable<TEnum> values)
where TEnum : struct, IConvertible, IComparable, IFormattable
{
Nullable<TEnum> merged = null;
if (values == null || values.Count() == 0)
return null;
foreach(TEnum value in values)
{
if (merged == null)
merged = value;
else
{
merged = merged | value;
}
}
return merged;
}
但问题是这一行:
merged = merged | value;
不会编译。我收到的消息是:
运算符“|”不能应用于“TEnum?”类型的操作数?和“TEnum”。
是否可以编写这种将枚举值数组转换为标志枚举的通用方法?
【问题讨论】:
-
为什么需要在这里返回
TEnum??[Flags]枚举应该总是有一个0/None值 - 你不会直接返回吗? -
除此之外:在序列上执行
Count()意味着您要对其进行两次迭代——这不是一个好主意——它可能很昂贵,但甚至不能保证工作 -
没有不涉及拳击的简单方法;复杂的方法就足够了吗?
-
我正在尝试将枚举值数组合并为一个由这些值组成的枚举值,条件是 TEnum 是用 [FlagsEnum] 标记的枚举。我在这里有意义吗? :) 检查其他 stackoverflow 线程上的链接,我正在尝试以通用方式完成相同的操作。
-
问题是一旦你进入泛型领域,
Enum的行为实际上会丢失,因此你不能简单地 OR 值。