c# – 将枚举值与本地化字符串资源相关联

c# – 将枚举值与本地化字符串资源相关联,第1张

概述有关: Get enum from enum attribute 我希望以最可维护的方式绑定枚举,并将它与关联的本地化字符串值相关联. 如果我把枚举和类放在同一个文件中,我觉得有些安全,但我必须假设有更好的方法.我还考虑过将枚举名称与资源字符串名称相同,但我担心我不能总是在这里强制执行. using CR = AcmeCorp.Properties.Resources;public enum 有关:
Get enum from enum attribute

我希望以最可维护的方式绑定枚举,并将它与关联的本地化字符串值相关联.

如果我把枚举和类放在同一个文件中,我觉得有些安全,但我必须假设有更好的方法.我还考虑过将枚举名称与资源字符串名称相同,但我担心我不能总是在这里强制执行.

using CR = AcmeCorp.PropertIEs.Resources;public enum SourceFilterOption{    LastNumberOccurences,LastNumberWeeks,Daterange    // if you add to this you must update FilterOptions.GetString}public class FilterOptions{    public Dictionary<SourceFilterOption,String> GetEnumWithResourceString()    {        var dict = new Dictionary<SourceFilterOption,String>();        foreach (SourceFilterOption filter in Enum.GetValues(typeof(SourceFilterOption)))        {            dict.Add(filter,GetString(filter));        }        return dict;    }    public String GetString(SourceFilterOption option)    {        switch (option)        {            case SourceFilterOption.LastNumberOccurences:                return CR.LAST_NUMBER_OF_OCCURANCES;            case SourceFilterOption.LastNumberWeeks:                return CR.LAST_NUMBER_OF_WEEKS;            case SourceFilterOption.Daterange:            default:                return CR.DATE_RANGE;        }    }}
解决方法 您可以将DescriptionAttribute添加到每个枚举值.
public enum SourceFilterOption{    [Description("LAST_NUMBER_OF_OCCURANCES")]    LastNumberOccurences,...}

在需要时拉出描述(资源键).

FIEldInfo fi = value.GetType().GetFIEld(value.ToString());DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute),if (attributes.Length > 0){    return attributes[0].Description;}else{    return value.ToString();}

http://geekswithblogs.net/paulwhitblog/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx

编辑:对评论的回应(@Tergiver).在我的示例中使用(现有)DescriptionAttribute是为了快速完成工作.您最好实现自己的自定义属性,而不是使用其目的之外的属性.像这样的东西:

[AttributeUsage(AttributeTargets.FIEld,AllowMultiple = false,inheritable = false)]public class EnumResourceKeyAttribute : Attribute{ public string ResourceKey { get; set; }}
总结

以上是内存溢出为你收集整理的c# – 将枚举值与本地化字符串资源相关联全部内容,希望文章能够帮你解决c# – 将枚举值与本地化字符串资源相关联所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存