如果我有一个enum成员的类,我希望能够代表没有定义该成员的情况,哪个更好?
a)使用可空类型将该成员声明为类中可为空的.例如:
public SomeEnum? myEnum;
Run Code Online (Sandbox Code Playgroud)
b)在枚举中添加默认的"未知"值.例如:
public enum SomeEnum {
Unknown,
SomeValueA,
SomeValueB,
SomeValueC,
}
Run Code Online (Sandbox Code Playgroud)
无论如何,我都无法看到任何重大利弊; 但也许一个优于另一个?
如何创建具有空值的枚举
例如:
public enum MyEnum
{
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY,
None
}
Run Code Online (Sandbox Code Playgroud)
其中None值为null或String.Empty
在PowerShell中将Nullable Enum设置为$ null会导致System.Management.Automation.PSInvalidCastException异常.这是出乎意料的(至少对我来说).对此有合理的解释吗?下面是一个示例,显示如何设置Nullable Int32是否成功,但设置Nullable Enum会导致异常:
Add-Type @"
public enum ColorEnum
{
Red = 1,
Blue = 2,
Green = 3,
}
public class Thing
{
public ColorEnum? NullableColor = ColorEnum.Blue;
public System.Int32? NullableInt = 123;
}
"@
$test = New-Object Thing
# Setting the Nullable Int32 to $null works, as expected.
$test.NullableInt = $null
# Setting the Nullable Enum to $null causes exception.
$test.NullableColor = $null
Run Code Online (Sandbox Code Playgroud)
异常消息显示为:
异常设置"NullableColor":"由于枚举值无效,无法将null转换为类型"ColorEnum".请指定以下枚举值之一并重试.可能的枚举值为"红色,蓝色,绿色".
我希望能够使用Nullable Enum而不是默认值为0的Enum的原因是因为我想要使用的Enum表示可以为空的数据库列,当没有设置有效值时,该列应该为null .我无法更改数据库模型,所以不幸的是,感觉解决方案可能是使用Int32而不是Enum.
还有其他人经历过这个吗?这可能是一个错误吗?
$ PsVersionTable:
Name Value
---- ----- …Run Code Online (Sandbox Code Playgroud) 请参阅下面的枚举包含两个成员:测试和生产
public enum OTA_HotelInvCountNotifRQTarget
{
Test,
Production,
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找在上述枚举中添加和使用 Null 值的方法,代码如下:
inv.Target = OTA_HotelInvCountNotifRQTarget.Null; // Not allowed
Run Code Online (Sandbox Code Playgroud)
更新:
我不想NULL在上面的枚举中添加额外的内容,我想使其动态化,因为上面的枚举是自动生成的。并且应该保持不变。
有没有办法在方法本身中实现这一点,即无需在枚举中创建任何Class或添加额外的Enum值?喜欢 :inv.Target = OTA_HotelInvCountNotifRQTarget.Null;
我怎样才能做到这一点?
public class myclass
{
public Details DetailsInfo { get; set; }
public string name{ get; set; }
public string Email { get; set; }
public int subjects{ get; set; }
}
public enum subjects{
maths,
english,
science,
}
Run Code Online (Sandbox Code Playgroud)
这些科目中有一个是enum.即使我没有为主题输入任何值,它默认为0.这是枚举的行为.有没有办法检查我是否选择了任何主题值.
注意:我不想在枚举中使用任何未定义的值.
我有一个有一些价值观的枚举
public enum CompareOperators
{
GreaterThan,
LessThan,
GreaterThanEqualTo,
LessThanEqualTo,
EqualTo,
NotEqualTo
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,它返回此枚举的各种条件
public static CompareOperators GetTypeForOperator(string strType)
{
switch (strType)
{
case "=":
return CompareOperators.EqualTo;
case "!=":
return CompareOperators.NotEqualTo;
case ">":
return CompareOperators.GreaterThan;
case "<":
return CompareOperators.LessThan;
case ">=":
return CompareOperators.GreaterThanEqualTo;
case "<=":
return CompareOperators.LessThanEqualTo;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我在编译时遇到以下错误
Cannot convert null to CompareOperators because it is not a non-nullable value type
Run Code Online (Sandbox Code Playgroud)
null在switch声明中没有条件满足时返回的最佳方法是什么?
即使我查找了以下问题,我也没有得到解决方案的答案
我有一个枚举类“ Figure”和脚本:
public enum Figure { X, O }
private Figure[,] board = new Figure[boardSize, boardSize];
Run Code Online (Sandbox Code Playgroud)
当板上没有任何值时,我要向板上添加空值。示例:
board[0,0] = null-但这是错误的。我该怎么做?