[英]How to pass a generic Enum as dictionary key in method parameter
我试图创建一种方法来计算给定枚举在某些现有词典中出现的次数,以进行报告:
private static Dictionary<string, int> CountEnumOccurrence(Dictionary<Enum, List<string>> valueSource)
{
var convertedDictionary = new Dictionary<string, int>();
foreach (var entry in valueSource)
{
var name = Enum.GetName(entry.Key.GetType(), entry.Key);
convertedDictionary.Add(name, entry.Value.Count);
}
return convertedDictionary;
}
但是,如果我尝试这样调用此方法:
var criticalFailureCounts = CountEnumOccurrence(reportSpan.criticalFailures));
我懂了
“无法从'
System.Collections.Generic.Dictionary<Reporter.CriticalFailureCategory,System.Collections.Generic.List<string>>
'转换为'System.Collections.Generic.Dictionary<System.Enum,System.Collections.Generic.List<string>>
'“
即使Reporter.CriticalFailureCategory是枚举。 我显然是用错误的方式做的,但是我觉得应该有某种方法可以实现它。
这是目前Reporter.CriticalFailureCategory的定义:
namespace Reporter
{
[DataContract(Namespace = "")]
public enum CriticalFailureCategory
{
[EnumMember]
ExcessiveFailures,
[EnumMember]
StalledInConfiguration
}
}
这个想法是,可以无限扩展它,而不必重写报告该代码的代码。
您需要使CountEnumOccurrence
通用才能起作用。
private static Dictionary<string, int> CountEnumOccurrence<TEnum>(
Dictionary<TEnum, List<string>> valueSource)
{
var convertedDictionary = new Dictionary<string, int>();
foreach (var entry in valueSource)
{
var name = Enum.GetName(entry.Key.GetType(), entry.Key);
convertedDictionary.Add(name, entry.Value.Count);
}
return convertedDictionary;
}
如果要将TEnum
类型限制为仅枚举,则可以查看此问题,以了解如何以及为什么必须进行部分运行时检查,或者必须编写MSIL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.