草庐IT

c# - 将枚举绑定(bind)到 WinForms 组合框,然后设置它

很多人已经回答了如何在WinForms中将枚举绑定(bind)到组合框的问题。是这样的:comboBox1.DataSource=Enum.GetValues(typeof(MyEnum));但如果无法设置要显示的实际值,那将毫无用处。我试过:comboBox1.SelectedItem=MyEnum.Something;//Doesnotwork.SelectedItemremainsnull我也试过:comboBox1.SelectedIndex=Convert.ToInt32(MyEnum.Something);//ArgumentOutOfRangeException,Sele

c# - 为什么将 int 强制转换为无效的枚举值不会引发异常?

如果我有这样的枚举:enumBeer{Bud=10,Stella=20,Unknown}为什么在将这些值之外的int转换为Beer类型时不抛出异常?例如下面的代码没有抛出异常,它向控制台输出'50':inti=50;varb=(Beer)i;Console.WriteLine(b.ToString());我觉得这很奇怪……谁能解释一下? 最佳答案 取自ConfusionwithparsinganEnum这是创建.NET的人的决定。枚举由另一种值类型(int、short、byte等)支持,因此它实际上可以具有任何有效值对于那些值类型。

c# - 为什么将 int 强制转换为无效的枚举值不会引发异常?

如果我有这样的枚举:enumBeer{Bud=10,Stella=20,Unknown}为什么在将这些值之外的int转换为Beer类型时不抛出异常?例如下面的代码没有抛出异常,它向控制台输出'50':inti=50;varb=(Beer)i;Console.WriteLine(b.ToString());我觉得这很奇怪……谁能解释一下? 最佳答案 取自ConfusionwithparsinganEnum这是创建.NET的人的决定。枚举由另一种值类型(int、short、byte等)支持,因此它实际上可以具有任何有效值对于那些值类型。

c# - 为什么标志枚举通常用十六进制值定义

很多时候我看到使用十六进制值的标志枚举声明。例如:[Flags]publicenumMyEnum{None=0x0,Flag1=0x1,Flag2=0x2,Flag3=0x4,Flag4=0x8,Flag5=0x10}当我声明一个枚举时,我通常这样声明:[Flags]publicenumMyEnum{None=0,Flag1=1,Flag2=2,Flag3=4,Flag4=8,Flag5=16}为什么有些人选择用十六进制而不是十进制来写值,这有什么原因或依据吗?在我看来,使用十六进制值时更容易混淆,不小心写了Flag5=0x16而不是Flag5=0x10。

c# - 为什么标志枚举通常用十六进制值定义

很多时候我看到使用十六进制值的标志枚举声明。例如:[Flags]publicenumMyEnum{None=0x0,Flag1=0x1,Flag2=0x2,Flag3=0x4,Flag4=0x8,Flag5=0x10}当我声明一个枚举时,我通常这样声明:[Flags]publicenumMyEnum{None=0,Flag1=1,Flag2=2,Flag3=4,Flag4=8,Flag5=16}为什么有些人选择用十六进制而不是十进制来写值,这有什么原因或依据吗?在我看来,使用十六进制值时更容易混淆,不小心写了Flag5=0x16而不是Flag5=0x10。

c# - 如何迭代具有标志的枚举值?

如果我有一个包含标志枚举的变量,我能否以某种方式迭代该特定变量中的单位值?或者我是否必须使用Enum.GetValues遍历整个枚举并检查设置了哪些枚举? 最佳答案 staticIEnumerableGetFlags(Enuminput){foreach(EnumvalueinEnum.GetValues(input.GetType()))if(input.HasFlag(value))yieldreturnvalue;} 关于c#-如何迭代具有标志的枚举值?,我们在StackOverf

c# - 如何迭代具有标志的枚举值?

如果我有一个包含标志枚举的变量,我能否以某种方式迭代该特定变量中的单位值?或者我是否必须使用Enum.GetValues遍历整个枚举并检查设置了哪些枚举? 最佳答案 staticIEnumerableGetFlags(Enuminput){foreach(EnumvalueinEnum.GetValues(input.GetType()))if(input.HasFlag(value))yieldreturnvalue;} 关于c#-如何迭代具有标志的枚举值?,我们在StackOverf

c# - 如何使用枚举值的自定义字符串格式设置枚举绑定(bind)组合框?

在帖子中EnumToString,描述了一种使用自定义属性DescriptionAttribute的方法,如下所示:EnumHowNice{[Description("ReallyNice")]ReallyNice,[Description("KindaNice")]SortOfNice,[Description("NotNiceAtAll")]NotNice}然后,您调用函数GetDescription,使用如下语法:GetDescription(NotNice);//Returns"NotNiceAtAll"但是当我想简单地用枚举值填充ComboBox时,这并不能真正帮助我,因为我

c# - 如何使用枚举值的自定义字符串格式设置枚举绑定(bind)组合框?

在帖子中EnumToString,描述了一种使用自定义属性DescriptionAttribute的方法,如下所示:EnumHowNice{[Description("ReallyNice")]ReallyNice,[Description("KindaNice")]SortOfNice,[Description("NotNiceAtAll")]NotNice}然后,您调用函数GetDescription,使用如下语法:GetDescription(NotNice);//Returns"NotNiceAtAll"但是当我想简单地用枚举值填充ComboBox时,这并不能真正帮助我,因为我

c# - 获取枚举的最大值

如何获取枚举的最大值? 最佳答案 Enum.GetValues()似乎按顺序返回值,因此您可以这样做://giventhisenum:publicenumFoo{Fizz=3,Bar=1,Bang=2}//thisgetsFizzvarlastFoo=Enum.GetValues(typeof(Foo)).Cast().Last();编辑对于那些不愿意阅读评论的人:你也可以这样做:varlastFoo=Enum.GetValues(typeof(Foo)).Cast().Max();...当您的某些枚举值为负时,这将起作用。