C# 无法使用扩展方法隐式转换类型
我有一个枚举的扩展方法C# 无法使用扩展方法隐式转换类型,c#,casting,C#,Casting,我有一个枚举的扩展方法 public static IEnumerable<T> GetFlags<T>(this T value) where T : struct { CheckIsEnum<T>(true); foreach (T flag in Enum.GetValues(typeof(T)).Cast<T>()) { if (value.IsFlagSet(
public static IEnumerable<T> GetFlags<T>(this T value) where T : struct
{
CheckIsEnum<T>(true);
foreach (T flag in Enum.GetValues(typeof(T)).Cast<T>())
{
if (value.IsFlagSet(flag))
yield return flag;
}
}
我不清楚为什么会出现这个错误-但是您不能将
GetFlags
的结果强制转换为列表
,因为它不会返回列表
。最简单的解决方法是:
var ZoneConditionFlags_List = flags.GetFlags().ToList();
如果不起作用,请给出新的错误消息
或者,您可以更改
GetFlags
,使其实际返回一个列表,而不是使用迭代器块。GetFlags
返回一个IEnumerable
,而不是列表,您不能在此处强制转换
但是,您应该能够根据结果构建一个列表:
List<Zone_Status_ZoneConditionFlagEnum> ZoneConditionFlags_List = flags.GetFlags().ToList();
List ZoneConditionFlags\u List=flags.GetFlags().ToList();
但是,该错误与此处的代码不完全匹配,它应该抱怨IEnumerable无法强制转换,而是表示枚举类型。你确定这是正确的代码吗?这里的第一个问题是序列不同于列表;如果需要列表,请返回列表,或在GetFlags()
之后添加.ToList()
,即
var ZoneConditionFlags_List = flags.GetFlags().ToList();
然而,更大的问题是,您不能在通用上下文中使用IsFlagSet
;没有为任意T:struct
定义该方法
就个人而言,我认为您最好将其作为一个[Flags]
枚举处理;我假设您有需要列表而不是单个值的现有代码
List<Zone_Status_ZoneConditionFlagEnum> ZoneConditionFlags_List = flags.GetFlags().ToList();
var ZoneConditionFlags_List = flags.GetFlags().ToList();