草庐IT

c# - 在 C# 中将整数转换为枚举

在C#中有些东西我无法理解。您可以将超出范围的int转换为enum并且编译器不会退缩。想象一下这个枚举:enumColour{Red=1,Green=2,Blue=3}现在,如果你写:Coloureco;eco=(Colour)17;编译器认为这很好。还有运行时。嗯?为什么C#团队决定让这成为可能?这个决定忽略了使用枚举的要点,我认为,在这样的场景中:voidDoSomethingWithColour(Coloureco){//dosomethingtoeco.}在像C#这样的强类型语言中,我想假设eco将始终持有一个合法的Colour值。但这种情况并非如此。程序员可以使用分配给eco

c# - 标记枚举和按位运算与 “string of bits”

一位开发人员建议我们将一周中的几天选择存储为由1和0组成的7个字符的字符串,即“1000100”代表星期一和星期五。我更喜欢(并强烈建议)带有Flags枚举和按位运算的解决方案,我认为这是一种更简洁的方法,其他开发人员应该更容易理解。[Flags()]publicenumWeekdays:int{Monday=1,Tuesday=2,Wednesday=4,Thursday=8,Friday=16,Saturday=32,Sunday=64}但是,当我开始实现示例解决方案时,我意识到也许简单的字符串方法毕竟更简单:如果您只看数据,位串肯定比“17”更明显。我发现C#按位运算违反直觉且极

c# - 标记枚举和按位运算与 “string of bits”

一位开发人员建议我们将一周中的几天选择存储为由1和0组成的7个字符的字符串,即“1000100”代表星期一和星期五。我更喜欢(并强烈建议)带有Flags枚举和按位运算的解决方案,我认为这是一种更简洁的方法,其他开发人员应该更容易理解。[Flags()]publicenumWeekdays:int{Monday=1,Tuesday=2,Wednesday=4,Thursday=8,Friday=16,Saturday=32,Sunday=64}但是,当我开始实现示例解决方案时,我意识到也许简单的字符串方法毕竟更简单:如果您只看数据,位串肯定比“17”更明显。我发现C#按位运算违反直觉且极

c# - 如何检查是否设置了多个枚举标志?

我只想知道是否设置了一个枚举标志,而不是设置了哪些。我目前的想法是检查它是否是2的幂。是否有更好的方法内置到枚举类型中?[Flags]enumFoo{Flag1=0x01,Flag2=0x02,Flag3=0x04,Flag4=0x08,Flag5=0x10,Flag6=0x20,Flag7=0x40,Flag8=0x80}privateboolExactlynOneFlagSet(FoomyFoo){varx=(byte)myFoo;return(x!=0)&&((x&(x-1))==0);//Checkifapowerof2}if(!ExactlynOneFlagSet(Foomy

c# - 如何检查是否设置了多个枚举标志?

我只想知道是否设置了一个枚举标志,而不是设置了哪些。我目前的想法是检查它是否是2的幂。是否有更好的方法内置到枚举类型中?[Flags]enumFoo{Flag1=0x01,Flag2=0x02,Flag3=0x04,Flag4=0x08,Flag5=0x10,Flag6=0x20,Flag7=0x40,Flag8=0x80}privateboolExactlynOneFlagSet(FoomyFoo){varx=(byte)myFoo;return(x!=0)&&((x&(x-1))==0);//Checkifapowerof2}if(!ExactlynOneFlagSet(Foomy

c# - 处理枚举时没有默认的switch语句

自从我开始使用.NET以来,这一直是我的烦恼,但我很好奇以防我遗漏了什么。我的代码片段无法编译(请原谅示例的强制性质),因为(根据编译器)缺少返回语句:publicenumDecision{Yes,No}publicclassTest{publicstringGetDecision(Decisiondecision){switch(decision){caseDecision.Yes:return"Yes,that'smydecision";caseDecision.No:return"No,that'smydecision";}}}现在我知道我可以简单地放置一个默认语句来摆脱编译器警

c# - 处理枚举时没有默认的switch语句

自从我开始使用.NET以来,这一直是我的烦恼,但我很好奇以防我遗漏了什么。我的代码片段无法编译(请原谅示例的强制性质),因为(根据编译器)缺少返回语句:publicenumDecision{Yes,No}publicclassTest{publicstringGetDecision(Decisiondecision){switch(decision){caseDecision.Yes:return"Yes,that'smydecision";caseDecision.No:return"No,that'smydecision";}}}现在我知道我可以简单地放置一个默认语句来摆脱编译器警

c# - 在 ConverterParameter 中使用枚举

我正在构建一个可供许多用户使用的应用程序。每个用户都被分类到下一个身份验证级别之一:publicenumAuthenticationEnum{User,Technitian,Administrator,Developer}一些控件(例如按钮)只对某些级别的用户公开。我有一个属性保存当前用户的身份验证级别:publicAuthenticationEnumCurrentAuthenticationLevel{get;set;}我想将此属性绑定(bind)到某些控件的“Visibilty”属性,并将一个参数传递给Converter方法,告诉它能够看到该控件的最低身份验证级别是什么。例如:表示

c# - 在 ConverterParameter 中使用枚举

我正在构建一个可供许多用户使用的应用程序。每个用户都被分类到下一个身份验证级别之一:publicenumAuthenticationEnum{User,Technitian,Administrator,Developer}一些控件(例如按钮)只对某些级别的用户公开。我有一个属性保存当前用户的身份验证级别:publicAuthenticationEnumCurrentAuthenticationLevel{get;set;}我想将此属性绑定(bind)到某些控件的“Visibilty”属性,并将一个参数传递给Converter方法,告诉它能够看到该控件的最低身份验证级别是什么。例如:表示

c# - 如何设置枚举标志的所有位

我想知道将enum标志的所有位设置为1的通用方法。我只想要一个enum返回所有比较,而不考虑其他枚举。这段代码有效;[Flags]publicenumSomeRightEnum:uint{CanDoNothing=0,CanDoSomething=1但在上面的代码中,因为它是uint,我们设置了“F”的数量,如果它是int,它就不会工作。因此,无论数据类型如何(int,int64,uint等) 最佳答案 最简单的可能是:enumFoo{blah=1,....all=~0}对于基于无符号的枚举:enumFoo:uint{blah=1,