Исходя из вашего вопроса, вы хотите добиться создания словаря из перечисления, где значение перечисления в виде int является ключом, а какое-то отформатированное имя для него является значением, верно?
Ну, во-первых, функция, которую вы передаете, должна принять TK
в качестве аргумента, не так ли?
Во-вторых, бросать InvalidCastException
кажется немного странным. InvalidOperationException
может быть более подходящим (см. Также этот вопрос )
Третий ToDictionary
уже совсем близко:
public static Dictionary<int, string> EnumToDictionary<TK>(Func<TK, string> func)
{
if (typeof(TK).BaseType != typeof(Enum))
throw new InvalidOperationException("Type must be enum");
return Enum.GetValues(typeof(TK)).Cast<TK>().ToDictionary(x => Convert.ToInt32(x), x => func(x));
}
Теперь вы можете назвать это так:
public enum Types
{
type1 = 0,
type2 = 1,
type3 = 2
}
public string FormatName(Types t)
{
switch (t)
{
case Types.type1:
return "mytype1";
case Types.type2:
return "mytype2";
case Types.type3:
return "mytype3";
default:
return string.Empty;
}
}
var resultedAndFormatedDictionary = EnumToDictionary<Types>(FormatName);