微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用委托将两个函数合并在一起

我有以下两个功能

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

解决方法

当然,就用这个:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。