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

如何从typescript 1.8代码中迭代C#枚举描述属性,c#,typescript,enums,C#,Typescript,Enums,我有一个使用mvc和typescript代码的web应用程序,我有一个带有描述的c枚举 MyEnum { [First Value] FirstValue, [Second Value] SecondValue } 我需要迭代该C#枚举并获取要添加到typescript中数组的描述- 我怎样才能做到这一点 编辑 现在我正在工作,我可以发布完整的代码了——我的问题与打字脚本有关 命名空间作业{ using System; using System.Collections.Gene

我有一个使用mvc和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
}
}

如何在typescript中迭代上面的枚举

TypeScript代码如下:

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

}
导出类OrderStatusEditor扩展Serenity.Select2Editor{
private OrderStatusList:字符串[];
私有状态名称:状态;
构造函数(容器:JQuery){
super(容器,空);
//迭代C#Enum状态
for(statName中的var键)
本.添加选项(“键1”、“文本1”);
}
在上面的“文本1”中,是枚举状态的Description属性
“Order Active”且不是Status.OrderActive。

您可能应该更新您的代码段,使其成为有效的C#。请从您的代码中选取一个真实的示例。同时根据示例枚举,给出您希望数组具有的内容的示例


这听起来像是一项工作。您可以获取枚举的
类型
对象,然后发现您需要了解的所有信息,并生成数据返回到您的客户机(在本例中,可能是JSON数组)。

使用反射。希望这有帮助。您的问题与typescript没有关系,请删除标记

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

你不能用vanilla JavaScript,所以你不能用TypeScript。你必须在服务器上收集描述并将它们发送给客户端。如何做取决于你。@krillgar-这就是为什么我有一个TypeScript标记,并特别询问如何在TypeScript中做这件事。请参阅我更新的代码示例,其中我是一个我正在尝试这样做。这就是我要说的。当你在你的TypeScript代码中时,你没有访问服务器端代码的权限。你的TypeScript变成了在浏览器中执行的普通JavaScript。这些代码不知道,也不关心服务器上执行的是什么代码,更不用说它使用的是什么语言了。就像我说的,你需要这样做在C#中执行此操作,并将值发送到您的TypeScript。您在那里找不到该信息。@krillgar我感谢您的评论和信息,它确实帮助我更好地理解。我正在使用serenity web应用程序,我的TypeScript通过[EnumKey()]了解枚举属性-刚刚接触typescript、mvc并了解它的工作原理。我可能需要查找该属性在库中的定义位置。请查看问题的更新-您可以看到与typescript的相关性,我在其中显示了我尝试执行此操作的typescript代码文件。我需要在类型中对其进行迭代脚本。我在工作,所以我贴了一个真实的例子。c端不是我需要的-我以前从未使用过的typescript是我需要代码来迭代它的地方。在你的TS代码中,它说:
private statName:Status;
-Status的声明是什么样子的?它一定是在TS中。你是手工写的还是一个脚本从C#莫名其妙地生成了uto?这是我写的代码,试图找出这个类型脚本是如何工作的,看看如何从真实的枚举中获取属性描述……也许我不清楚。为了让你在类型脚本代码中使用标识符
状态
,它必须在类型脚本中声明。代码在哪里?你知道吗你写的还是自动生成的?你很清楚-我不清楚-我对输入脚本是新手,我想我是在声明我的C#enum,这样我就可以得到description属性。Serenity在后台大量构建类型脚本,这样intellisense就可以在我的C#代码中工作,也可以在我的类型脚本代码中使用它-这是runs在客户端(我并不总是确定如何从那里访问c#代码)基本上我有客户端需要了解的服务器端代码。我想如果我可以访问c#字符串数组并访问它。
var eType = typeof (TEnum);

foreach (TEnum eValue in Enum.GetValues(eType))
{
   var name = Enum.GetName(eType, eValue);
   var descp = GetEnumDescription(eValue, name );
}