我有一个使用MVC C#和Typescript代码的Web应用程序,我有一个带有描述的C#枚举。
MyEnum
{
[First Value] FirstValue,
[Second Value] SecondValue
}
我需要迭代C#枚举,并将描述添加到Typescript中的数组 - 我该如何完成?
编辑现在我正在工作,我可以发布完整的代码 - 我的问题与打字稿有关。
名称空间{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Serenity.ComponentModel;
using System.ComponentModel;
[EnumKey("Order.Status")]
public enum Status
{
[Description("Order Active")]
OrderActive = 1,
[Description("Order Complete")]
OrderComplete = 2
}
}
如何在打字稿中迭代上方的枚举?
打字稿代码如下:
export class OrderStatusEditor extends Serenity.Select2Editor<any, any> {
private OrderStatusList: string[];
private statName: Status;
constructor(container: JQuery) {
super(container, null);
// Iterate the C# Enum Status
for (var key in statName )
this.addOption("key1", "Text 1");
}
在上面的"文本1"中是枚举状态的描述属性 "订单活动",而不是状态。
使用反射。希望这可以帮助。您的问题与打字稿没有关系,请删除标签
private static string GetEnumDescription<TEnum>(TEnum item, string enumName) where TEnum: struct
{
Type type = item.GetType();
var attribute =
type.GetField(item.ToString())
.GetCustomAttributes(typeof (DescriptionAttribute), false)
.Cast<DescriptionAttribute>()
.FirstOrDefault();
return attribute == null
? enumName
.FirstCharToUpper()
.ToSeparatedWords()
: attribute.Description;
}
和使用它的方法
var eType = typeof (TEnum);
foreach (TEnum eValue in Enum.GetValues(eType))
{
var name = Enum.GetName(eType, eValue);
var descp = GetEnumDescription(eValue, name );
}
您可能应该更新代码片段,以便有效C#。以您的代码为例。还举个示例,说明您希望数组具有的内容,以示例枚举。
这听起来像是反思的工作。您可以获取枚举的Type
对象,然后发现您需要了解的所有内容并生成数据以返回客户端(在这种情况下,大概是在JSON数组中)。