如何在C#中创建像String Literal Union类型的TypeScript

时间:2018-06-29 15:40:53

标签: c# types enums

我正在使用C#和一些JSON和API。我想知道如何处理这样的事情。

JSON值之一是字符串,可以是以下值之一:“ Last_Day”,“ Last_Week”,“ Last_Month”。

在TypeScript中,我可以这样做:

type DateSince = "Last_Day" | "Last_Week" | "Last_Month"

然后我得到如下类型的提示:

VS Code type hinting suggesting 3 possible values.

如果该值不是那三个字符串,则显示红色花键行错误。从技术上讲,我的值仍然是字符串,这是我需要与JSON API请求和响应一起使用的值。

我还没有找到一种使用C#做到这一点的好方法。甚至可以相对轻松地用C#做到这一点吗?

我的理想解决方案是让我将自定义类型分配给变量,而不是使用字符串。这样,我就不必记住可能的字符串值。

2 个答案:

答案 0 :(得分:2)

在C#中,您可以使用枚举。

public enum DateSince
{
    Last_Day ,
    Last_Week,
    Last_Month
}

用法:

var datesince = DateSince.Last_Day;

Read more about C# Enums

答案 1 :(得分:0)

@PatrickRoberts和@afrazier建议,最好的方法是使用枚举和Json.NET StringEnumConverter。

[JsonConverter(typeof(StringEnumConverter))]
public enum DateSince
{
    [EnumMember(Value = "LAST_DAY")]
    LastDay,
    [EnumMember(Value = "LAST_WEEK")]
    LastWeek,
    [EnumMember(Value = "LAST_MONTH")]
    LastMonth,
}

Customizing Enumeration Member Values