C# 在C中为属性类使用枚举#
我是C#的新手,我想要实现的是以下目标 我有一个具有Type属性的Action类,该类接受以下值、按钮或链接之一: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
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,则常量的使用可能会产生副作用。通常我会尽量避免使用公共常量。您可以使用常量
,但有一点不同-如果您更改常量
的值,则必须重新编译使用它的任何内容-对于静态只读
,情况并非如此。