C# 在C中为属性类使用枚举#

C# 在C中为属性类使用枚举#,c#,enums,C#,Enums,我是C#的新手,我想要实现的是以下目标 我有一个具有Type属性的Action类,该类接受以下值、按钮或链接之一: public class Action { public ActionType Type { get; set; } } public enum ActionType { Button, Link } 我正在使用WebAPI,现在我使用下面的模拟列表来检查返回的数据 private static IList<Alert> alerts

我是C#的新手,我想要实现的是以下目标

我有一个具有Type属性的Action类,该类接受以下值、按钮或链接之一:

public class Action
{
    public ActionType Type { get; set; }

}


public enum ActionType
{
    Button,
    Link
} 
我正在使用WebAPI,现在我使用下面的模拟列表来检查返回的数据

private static IList<Alert> alerts = new List<Alert>()
{
    new Alert()
    {
        Description = "You have cancelled your subscription",
        Actions = new Action[]
        {
            new Action()
            {
                Type = ActionType.Button
            }
        }

    }
};
我想要实现的是为type属性返回值“button”或“link”。我尝试这样做,定义ActionType:

public enum ActionType
{
    Button = "button",
    Link   = "link"
}
但我得到以下错误“无法隐式地将类型'string'转换为'int'


如何修复上述错误?

您需要使用自己的JSON序列化,例如使用JSON.net,它具有相应的属性。请查看以下内容:

class Example
{
  [JsonConverter(typeof(StringEnumConverter))]
  public ActionType ActionType { get; set; }
}

var serializedObject = JsonConvert.SerializeObject(new Example(), Formatting.Indented);

您需要使用自己的JSON序列化,例如使用JSON.net,它有一个用于此的属性

class Example
{
  [JsonConverter(typeof(StringEnumConverter))]
  public ActionType ActionType { get; set; }
}

var serializedObject = JsonConvert.SerializeObject(new Example(), Formatting.Indented);

您可以将枚举定义为:

public enum ActionType
{
    Button,
    Link
}
如果您需要它作为字符串,请使用:

var myEnum = ActionType.Button;
var myEnumAsString = myEnum.ToString();
这并不是最有效的方法,但却是最简单的方法

否则,您可以创建一个

public static class ActionType
{

    const string Button = "Button",
    const string Link = "Link"

}

但这本质上是一个枚举,但没有int基。

您可以将枚举定义为:

public enum ActionType
{
    Button,
    Link
}
如果您需要它作为字符串,请使用:

var myEnum = ActionType.Button;
var myEnumAsString = myEnum.ToString();
这并不是最有效的方法,但却是最简单的方法

否则,您可以创建一个

public static class ActionType
{

    const string Button = "Button",
    const string Link = "Link"

}

但这本质上是一个枚举,但没有int基。

您只能将
整数
值分配给
枚举
中的键

  public enum ActionType {
    Button = 1,
    Link   = 2
  }
如果要将字符串(或任何内容)分配给枚举键,可以实现扩展方法:

publicstaticactiontypeextension{
//扩展方法:扩展ActionType(ActionType之前的“this”)
//返回字符串
公共静态字符串ToReport(此ActionType值){
如果(值==ActionType.Button)
返回“按钮”;
其他的
返回“链接”;
} 
}
....
ActionType action=ActionType.Button;

String result=action.ToReport();//您只能将
integer
值分配给
enum
中的键,例如

  public enum ActionType {
    Button = 1,
    Link   = 2
  }
如果要将字符串(或任何内容)分配给枚举键,可以实现扩展方法:

publicstaticactiontypeextension{
//扩展方法:扩展ActionType(ActionType之前的“this”)
//返回字符串
公共静态字符串ToReport(此ActionType值){
如果(值==ActionType.Button)
返回“按钮”;
其他的
返回“链接”;
} 
}
....
ActionType action=ActionType.Button;

String result=action.ToReport();//枚举是一组命名常量,其基础类型为任何整数类型(int、byte、long等)。字符串不是整数类型,因此不能将其用作枚举值。可以将属性类型更改为
String

public class Action
{
    public string Type { get; set; }
}
并将类与公共字符串值一起使用,而不是使用枚举:

public class ActionType
{
    public static readonly string Button = "button";
    public static readonly string Link = "link";
}

但是我会使用枚举并传递整数值。如果您有一组值,则最好使用枚举,因为字符串不会限制您可以为操作的属性
类型
分配什么。我可以分配“Foo”“那没关系,因为我甚至不知道
ActionType
类的存在。使用枚举,您将有更多的安全性-属性的类型为
ActionType
,不可能无意中指定错误的值。此外,传递整数将比传递枚举常量的字符串名称使用更少的通信量。

枚举是一组命名常量,其基础类型为任何整数类型(int、byte、long等)。字符串不是整数类型,因此不能将其用作枚举值。您可以将属性类型更改为
string

public class Action
{
    public string Type { get; set; }
}
并将类与公共字符串值一起使用,而不是使用枚举:

public class ActionType
{
    public static readonly string Button = "button";
    public static readonly string Link = "link";
}

但是我会使用enum并传递整数值。如果您有一组值,则最好使用枚举,因为字符串不会限制您可以分配给动作的属性
类型
。我可以指定“Foo”,这样就可以了,因为我甚至不知道
ActionType
类的存在。使用枚举,您将有更多的安全性-属性的类型为
ActionType
,不可能无意中指定错误的值。此外,传递整数将比传递枚举常量的字符串名称使用更少的通信量。

使用返回的枚举,并在返回的枚举上使用.toString方法。与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.作为参考,如果您没有为枚举定义值,则假定第一个值为0。如果您要将其设置为ActionType。链接值将为1使用返回的枚举,并在返回的枚举上使用.toString方法。与论坛网站不同,我们不在上使用“感谢”或“感谢任何帮助”或签名。请参阅”。作为参考,如果您没有为枚举定义值,则假定第一个值为0。如果要将其设置为ActionType.Link,则字符串的值为1,如果为只读,则可以使用常量static@RobertSnyder常量在调用程序代码中是以行形式排列的,所以如果在单独的程序集中定义ActionType,则常量的使用可能会产生副作用。通常我会尽量避免使用公共常量。您可以使用
const
,但有一点不同-如果您更改
const
的值,任何使用它的东西都必须重新编译-对于
静态只读
,这不是真的。对于字符串,如果它是只读的,可以使用常量static@RobertSnyder常量在调用程序代码中是以行形式排列的,所以如果在单独的程序集中定义ActionType,则常量的使用可能会产生副作用。通常我会尽量避免使用公共常量。您可以使用
常量
,但有一点不同-如果您更改
常量
的值,则必须重新编译使用它的任何内容-对于
静态只读
,情况并非如此。