我正在阅读“C#viaCLR”,在第380页上,有一条说明如下:NoteTheEnumclassdefinesaHasFlagmethoddefinedasfollowspublicBooleanHasFlag(Enumflag);Usingthismethod,youcouldrewritethecalltoConsole.WriteLinelikethis:Console.WriteLine("Is{0}hidden?{1}",file,attributes.HasFlag(FileAttributes.Hidden));However,Irecommendthatyouavoid
我有以下枚举定义(在C#中):publicenumELogLevel{General=-1,//Shouldonlybeusedindrop-downboxinMerliniaAdministratorlogsettingsAll=0,//Shouldnotbeusedasalevel,onlyasathreshold,effectivelysameasTraceTrace=1,Debug=2,Info=3,Warn=4,Error=5,Fatal=6,Off=7//Shouldnotbeusedasalevel,onlyasathreshold}现在,当我对这种类型执行Enum.Ge
我正在使用静态方法Enum.GetValues(typeof(SomeEnum));当您需要做的只是枚举值时,此方法非常有用,但出于某种原因,它返回一个非常简单的Array类形式。我正在尝试找到一种简单的方法将其返回值转换为更“正常”的集合类,例如常规数组或List。到目前为止,如果我想这样做,我必须枚举Enum.GetValues(typeof(SomeEnum));的输出。并将它们一一添加到列表。有什么想法可以更干净地做到这一点吗?答案:关键是对返回结果进行强制转换--SomeEnum[]enums=(SomeEnum[])Enum.GetValues(typeof(SomeEnu
enum类型用作字典键时是否比string类型更快/更有效?IDictionaryorIDictionary事实上,哪种数据类型最适合作为字典键,为什么?请考虑以下事项:注意:为简单起见,只有5个属性structMyKeys{publicstringIncomplete="IN";publicstringSubmitted="SU";publicstringProcessing="PR";publicstringCompleted="CO";publicstringClosed="CL";}和enumMyKeys{Incomplete,Submitted,Processing,Comp
每当我尝试序列化字典时,我都会得到异常:System.ArgumentException:Type'System.Collections.Generic.Dictionary`2[[Foo.DictionarySerializationTest+TestEnum,Foo,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null],[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]'isnotsupportedfors
我正在尝试新的HasFlags功能,并想知道以下应该工作:enum.HasFlag(AccessRights.Read|AccessRights.Write)...因为好像没有...DBAccessRightsrights=(DBAccessRights)permission.PermissionFlags;if(rights.HasFlag(DBAccessRights.WikiMode)){//works}if(rights.HasFlag(DBAccessRights.WikiMode|DBAccessRights.CreateNew)){//Doesn'twork}DBAcce
我很好奇为什么这段代码...enumTile{Empty,White,Black};privatestringTileToString(Tilet){switch(t){caseTile.Empty:return".";caseTile.White:return"W";caseTile.Black:return"B";}}抛出该错误。t不可能取任何其他值,是吗?编译器不应该足够聪明来解决这个问题吗? 最佳答案 不,您可以使用任何转换为Tile的int值。试试这个:Tilet=(Tile)5;strings=TileToStrin
我遇到了一些继承了uint的枚举器。我不明白为什么有人会这样做。例子:EnummyEnum:uint{...}有人会这样做的任何优势或具体原因?为什么不将其保留为defaultint? 最佳答案 如果枚举值大于2,147,483,647且非负。 关于c#-将Enum指定为uint的原因是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/413397/
我想要一个可以与任何Flags样式枚举一起使用的通用函数,以查看是否存在标志。这不会编译,但如果有人有建议,我将不胜感激。publicstaticBooleanIsEnumFlagPresent(Tvalue,TlookingForFlag)whereT:enum{Booleanresult=((value&lookingForFlag)==lookingForFlag);returnresult;} 最佳答案 不,您不能使用C#泛型执行此操作。但是,您可以做:publicstaticboolIsEnumFlagPresent(Tv
据我们所知System.Enum是所有枚举的基础,但我想知道为什么反射说它不是枚举本身?Console.WriteLine(typeof(System.Enum).IsEnum)//saysitisfalse我无法理解其中的逻辑,所以System.Enum不是枚举,但是从它派生的所有东西都是枚举?当我看到msdn时,我第二次震惊了。这是一个类publicabstractclassEnum:ValueType,IComparable,IFormattable,IConvertible所以Enum是一个类,但是它是值类型(派生自特殊的ValueType类,它将枚举作为值类型)并且是所有枚举