提问者:小点点

使用委托将两个函数合并在一起


我有以下两个功能:

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())((Enum)enumObject).GetDescription())部分。

那有可能吗?我在试着这么做的时候被卡住了。在伪代码中,我想的是这样的东西:

public static Dictionary<int, string> GetEnumValues<T>(delegate someFunction)
    where T : struct
{
    return Enum.GetValues(typeof(T))
        .Cast<object>()
        .ToDictionary(enumValue => (int)enumValue, someFunction);
}

共1个答案

匿名用户

当然,用这个就行了:

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());