如何从typescript 1.8代码迭代C#Enum描述属性

时间:2016-12-06 13:26:31

标签: c# typescript enums

我有一个使用mvc c#和typescript代码的网络应用程序,我有一个带有描述的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
}

}

  

如何在打字稿中迭代上面的枚举?

TypeScript Code Follows:

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

}

在上面的&#34;文字1&#34;是枚举状态的Description属性     &#34;订购有效&#34;并且不是Status.OrderActive。

2 个答案:

答案 0 :(得分:0)

您应该更新您的代码段,使其有效C#。从您的代码中获取一个真实的例子。还要根据示例枚举提供您希望数组具有的内容示例。

这听起来像是Reflection的工作。您可以获取枚举的Type对象,然后发现您需要了解的所有内容并生成数据以返回到您的客户端(在这种情况下可能是JSON数组)。

答案 1 :(得分:0)

使用反射。希望这可以帮助。您的问题与打字稿没有关系,请删除标签

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