这是我德尔菲时代的遗留问题,我可以做以下事情:
type
TCars = (Ford, Nissan, Toyota, Honda);
const
CAR_MODELS = array[TCars] of string = ('Falcon','Sentra','Camry','Civic');
允许我声明性地使用一些相关数据进行枚举。在这种情况下,一个字符串,但它可能是一个记录结构或类似物。这意味着如果我将一个成员添加到TCars并忘记更新CAR_MODELS数组,我将收到编译时错误。
这是什么C#方法?我试过了:
public enum ReportFileGeneratorFileType
{
Excel,
Pdf,
Word
}
string[ReportFileGeneratorFileType] myArray = {"application/vnd.ms-excel", "application/pdf", "application/vnd.ms-word"};
但似乎没有编译。
答案 0 :(得分:3)
您应该使用Dictionary<key, value>
作为
var myArray = new Dictionary<ReportFileGeneratorFileType, string>();
myArray[ReportFileGeneratorFileType.Excel] = "application/vnd.ms-excel";
答案 1 :(得分:2)
您可以在枚举值上使用属性(自定义或内置int,例如DisplayNameAttribute)来为它们提供关联的名称/值。示例自定义属性如下:
public class ContentTypeAttribute : Attribute
{
public string ContentType { get; set; }
public ContentTypeAttribute(string contentType)
{
ContentType = contentType;
}
}
public enum ReportFileGeneratorFileType
{
[ContentType("application/vnd.ms-excel")]
Excel,
[ContentType("application/pdf")]
Pdf,
[ContentType("application/vnd.ms-word")]
Word
}
要根据枚举值检索内容类型,请使用:
...
ReportFileGeneratorFileType myType = ...
string contentType = myType.GetType()
.GetCustomAttributes(typeof(ContentTypeAttribute))
.Cast<ContentTypeAttribute>()
.Single()
.ContentType;
...
这可能看起来有点复杂,但是让你可以在枚举本身上保留内容类型(或任何数据),这样你就不会忘记在添加新类型后添加它。
答案 2 :(得分:1)
使用此命名空间c#
using System.ComponentModel;
{/ 1}}
Description
您可以将public enum ReportFileGeneratorFileType
{
[Description("application/vnd.ms-excel")]
Excel,
[Description("application/pdf")]
Pdf,
[Description("application/vnd.ms-word")]
Word
}
属性添加到枚举元素
Dictionary<ReportFileGeneratorFileType, string>
use Attributes
您可以从枚举中“提取”{{1}}并在代码中使用它。