【发布时间】:2020-05-19 19:02:32
【问题描述】:
我有一堆从外部来源读取的字典(以字符串为键)。我想将所有字典转换为具有不同枚举作为键的字典。对于每个枚举,我都有一个将字符串转换为枚举的自定义方法。
我希望能为所有枚举类型编写一个通用方法,而不是为每个枚举类型编写一个转换函数。
我对泛型(或类型检查)不太熟悉,但下面的代码是编写函数的尝试。 vs-intellisense 不喜欢这种解决方案。有可能做我想做的事吗?如果是这样,怎么办?
我使用 .Net Framework 4.5.2,所以我猜那是 C# 5.0(目前还不能选择更新)。
public enum Product { Product1, Product2, Product3 };
public enum Fund { Fund1, Fund2, Fund3 }
//...and lots of different enums
private static Dictionary<T, double> ConvertDict<T>(Dictionary<string, double> dict) where T : Enum
{
var returnDict = new Dictionary<T, double>();
//Here ideally I would do something like this
switch (typeof(T))
{
case typeof(Product): //This a no go
foreach (var keyValuePar in dict)
returnDict.Add(CustomProductEnumConverter(keyValuePar.Key), keyValuePar.Value);
break;
case typeof(Fund): //This a no go
foreach (var keyValuePar in dict)
returnDict.Add(CustomFundEnumConverter(keyValuePar.Key), keyValuePar.Value);
break;
default:
throw new Exception("Unknown enum-type");
}
return returnDict;
}
public static Product CustomProductEnumConverter(string productName)
{
//No clear link between enum name and string value...
if (productName == "base012")
return Product.Coffee;
if (productName == "defa341")
return Product.Milk;
if (productName == "urak451")
return Product.Juice;
//...
}
我的想法是我可以像这样调用我的新函数
var prodDictA = ConvertToDict<Product>(rawProdDictA)
var prodDictB = ConvertToDict<Product>(rawProdDictB)
var fundDictA = ConvertToDict<Fund>(rawFundDictA)
//etc...
【问题讨论】:
-
通常在泛型方法中使用
typeof意味着您在设计方面做错了一些事情。枚举转换器长什么样子? -
@Pavel Anikhouski 也许......在这种情况下,您将返回泛型类型并且只有一次转换。在我的情况下,您必须根据推断的类型进行多次转换。我会看看我是否可以做类似的事情。