如果是这样,我应该如何传递参数?匹配枚举名称的字符串可以吗?如果我要传递匹配枚举项的下拉框,这会很方便。使用thisanswer中提供的解决方案会很有用如果我在提交回数据时可以轻松地绑定(bind)到枚举。 最佳答案 是的,当有这样的Controller时:enumMyAction{Lalala}publicActionResultIndex(MyActionaction){...}您只需执行Index/Lalala,一切正常。如果您需要更复杂的绑定(bind)(比如将某个字符串值映射到一个复杂的类),请使用类似StructureM
假设我的数据库表有UserType、SalesType等列我应该拥有包含UserTypeID、userTypeName的数据库表还是应该只创建一个C#枚举? 最佳答案 两者有什么问题?如果值是用户定义的或不断变化的,enum肯定不适合。如果值严格不变(例如性别),您可以将它们作为enums以便于在应用程序中引用,也可以在数据库中作为单独的表来强制执行外键和作为一个引用。 关于c#-我应该将枚举ID/值存储在数据库中还是C#枚举中?,我们在StackOverflow上找到一个类似的问题:
我有一个Controller[HttpGet][RoutePrefix("api/products/{productId}")]publicHttpResponseMessageProducts(intproductId,TypeEnumptype=TypeEnum.Clothes){if(!Enum.IsDefined(typeOf(TypeEnum),ptype))//throwbadrequestexceptionelse//continueprocessing}Myenum声明为publicTypeEnum{Clothes,Toys,Electronics}目前,如果传递了一些
我遇到了如下情况:enumHeader{Sync,[OldProtocol]Keepalive,Ping,[OldProtocol]Auth,[OldProtocol]LoginData//...}我需要获取定义了OldProtocolAttribute的元素数组。我注意到Attribute.IsDefined()方法及其重载显然不支持这种情况。我的问题是:有没有办法在解决方案的任何部分不使用typeof(Header).GetField()的情况下解决问题?如果不是,解决它的最佳方法是什么? 最佳答案 据我所知,您必须从字段中获取
我们的源代码中有一个通用组件,它包含一个非常大的应用程序的所有枚举(大约300个!)。有没有什么方法可以使用C#或VB.NET遍历所有这些对象以便对每个对象执行一个操作?问题Howtoiterateall“publicstring”propertiesina.netclass几乎是相关的,但我正在处理的枚举是多种类型的混合 最佳答案 类似的东西?varquery=Assembly.GetExecutingAssembly().GetTypes().Where(t=>t.IsEnum&&t.IsPublic);foreach(Type
对于将字符串转换为枚举,以下哪种方式更好?这段代码:colorEnumcolor=(colorEnum)Enum.Parse(typeof(colorEnum),"Green");或者这个:stringcolorString=...colorEnumcolor;switch(colorString){case"Green":color=colorEnum.Green;break;case"Red":color=colorEnum.Red;break;case"Orange":color=colorEnum.Orange;break;....} 最佳答案
我正在尝试创建一个辅助方法来列出枚举值中设置的所有位的名称(用于记录目的)。我想要一个方法来返回在某些变量中设置的所有枚举值的列表。在我的例子中[Flag]EnumHWResponse{None=0x0,Ready=0x1,Working=0x2,Error=0x80,}我给它0x81,它应该给我一个IEnumerable包含{Ready,Error}.由于没有找到更简单的方法,我试着写了下面的代码,但我无法编译。publicstaticIEnumerableMaskToList(Enummask){if(typeof(T).IsSubclassOf(typeof(Enum))==fa
C#枚举类型安全吗?如果不是,会有什么影响? 最佳答案 给出一个稍微不同的答案......虽然从转换的角度来看这些值是类型安全的,但一旦它们被转换它们仍然没有被检查-即enumFoo{A=1,B=2,C=3}staticvoidMain(){Foofoo=(Foo)500;//worksfineConsole.WriteLine(foo);//alsofine-shows500}因此,您应该注意检查值-例如default在switch抛出异常。您还可以通过以下方式检查(对于非[Flags]值):boolisValid=Enum.Is
为了在此DatagridViewComboBox中显示ReadAccess枚举成员,我还需要做什么?ReadDataGridViewComboBoxColumn.Items.Clear();ReadDataGridViewComboBoxColumn.Items.AddRange(ReadAccess.None,ReadAccess.Allowed);ReadDataGridViewComboBoxColumn.ValueType=typeof(ReadAccess);这里是设计者生成的关于DataGridView的代码:this.rolesDataGridView.AutoGener
直到询问question在这里我从来没有认为(枚举)是一件“坏事”。对于那些认为它们不是最佳实践的人,有哪些方法/模式可以避免在代码中使用它们?编辑:publicEnumSomeStatusApproved=1Denied=2Pending=3endEnum 最佳答案 Fowler的Refactoring中描述了枚举的问题。,它被认为是代码味道。它与类型安全无关,而是迫使您在整个代码中添加switch语句,从而违反了DRY原则。Statepattern是相同结构的更好模型,因为它允许您在同一类中实现和改变与相同状态相关的逻辑。这也增