如何从打字稿1.8代码中迭代C#枚举描述属性



我有一个使用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数组中)。

最新更新