我有一个使用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。
答案 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 );
}