使用委托将两个函数合并在一起
Use a delegate to merge two functions together
我有以下两个功能:
public static Dictionary<int, string> GetEnumLocalizations<T>()
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => ((Enum)enumObject).ToLocalizedValue());
}
public static Dictionary<int, string> GetEnumDescriptions<T>()
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => ((Enum)enumObject).GetDescription());
}
public static string GetDescription(this Enum value)
{
return ...
}
public static string ToLocalizedValue(this Enum value)
{
return ...
}
如果我没记错的话,应该可以把GetEnumLocalizations()
和GetEnumDescriptions()
合并成一个函数,然后用委托参数解析((Enum)enumObject).ToLocalizedValue())
和[=15] =]部分。
这可能吗?我在尝试这样做时被卡住了。在伪代码中,我在想类似的东西:
public static Dictionary<int, string> GetEnumValues<T>(delegate someFunction)
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, someFunction);
}
当然可以,就用这个:
public static Dictionary<int, string> GetEnumValues<T>(Func<Enum, string> someFunction)
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => someFunction((Enum)enumObject);
}
现在你应该可以这样调用它了:
GetEnumValues<MyEnum>(x => x.ToLocalizedValue());
我有以下两个功能:
public static Dictionary<int, string> GetEnumLocalizations<T>()
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => ((Enum)enumObject).ToLocalizedValue());
}
public static Dictionary<int, string> GetEnumDescriptions<T>()
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => ((Enum)enumObject).GetDescription());
}
public static string GetDescription(this Enum value)
{
return ...
}
public static string ToLocalizedValue(this Enum value)
{
return ...
}
如果我没记错的话,应该可以把GetEnumLocalizations()
和GetEnumDescriptions()
合并成一个函数,然后用委托参数解析((Enum)enumObject).ToLocalizedValue())
和[=15] =]部分。
这可能吗?我在尝试这样做时被卡住了。在伪代码中,我在想类似的东西:
public static Dictionary<int, string> GetEnumValues<T>(delegate someFunction)
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, someFunction);
}
当然可以,就用这个:
public static Dictionary<int, string> GetEnumValues<T>(Func<Enum, string> someFunction)
where T : struct
{
return Enum.GetValues(typeof(T))
.Cast<object>()
.ToDictionary(enumValue => (int)enumValue, enumObject => someFunction((Enum)enumObject);
}
现在你应该可以这样调用它了:
GetEnumValues<MyEnum>(x => x.ToLocalizedValue());