草庐IT

c# - 枚举不序列化

我有一个WCF服务。它绑定(bind)到MSMQ,但这不是这里的问题。我可以序列化一个对象,该对象具有基类和在基类中实现的接口(interface),具体类派生自基类-这工作正常。然而,当我在基类中有一个枚举并设置该值时,在它被反序列化/从MSMQ读取之后,该值仍设置为默认值(即不是在代码中手动设置的值)有什么想法吗?我什至将枚举标记为DataContract,并将每个Enum成员标记为EnumMember属性。如何序列化枚举? 最佳答案 试试这个。[Serializable]publicenumEnumToSerialize{[X

c# - 使用泛型实现类型安全的枚举模式

如何在泛型类上实现类型安全的枚举模式?让我们假设它是按照这些思路实现的publicclassKnownSetting{publicreadonlystaticKnownSettingName=newKnownSetting("name","DefaultName",t=>t);publicreadonlystaticKnownSettingSize=newKnownSetting("size","25",t=>Converter.ToInt32);publicStringKey{get;set;}publicTDefaultValue{get;set;}publicFuncConver

c# - 还有另一种测试枚举位域的方法吗?

将枚举与位字段一起使用时:enumReallyBigEnum{FirstChoice=0x01,AnotherOption=0x02}ReallyBigEnumflag=ReallyBigEnum.FirstChoice|ReallyBigEnum.AnotherOption;用于测试位的代码是:if((flag&ReallyBigEnum.AnotherOption)==ReallyBigEnum.AnotherOption){...}这看起来冗长且容易出错,因为需要重复该位正在测试中。如果有某种表达方式就好了:if(flag.IsSet(ReallyBigEnum.AnotherO

c# - 为什么 C# 允许无效的枚举值

我花了一段时间试图理解为什么我的WPF应用程序没有正确地数据绑定(bind)到枚举属性,这就是原因。staticvoidMain(string[]args){MyEnumx=0;Console.WriteLine(x.ToString());Console.ReadLine();}publicenumMyEnum{First=1,Second=2}本质上,问题是在我绑定(bind)到的类的构造函数中没有为枚举属性设置默认值,因此它默认为零。有什么方法可以告诉C#编译器我希望它只接受有效值(并且默认为最低值)?我不希望我的属性接受无效值,我不想为每个使用枚举的属性编写setter代码。

c# - 枚举列为扩展名?

我有各种枚举用作下拉列表的来源,为了提供用户友好的描述,我为每个枚举添加了一个Description属性,然后执行以下操作:varlist=Enum.GetValues(typeof(MyEnum)).Cast().ToDictionary(k=>k,v=>v.GetAttributeOfType().Description).ToList();上面是重复的,因为我必须在很多地方使用它。我尝试添加一个扩展方法:publicstaticTGetAttributeOfType(thisEnumenumVal)whereT:System.Attribute{vartype=enumVal.G

c# - 带整数字符串的枚举

我有一个公共(public)枚举,如下所示:publicenumoccupancyTimeline{TwelveMonths,FourteenMonths,SixteenMonths,EighteenMonths}我将把它用于DropDown菜单,如下所示:@Html.DropDownListFor(model=>model.occupancyTimeline,newSelectList(Enum.GetValues(typeof(CentralParkLCPreview.Models.occupancyTimeline))),"")现在我正在寻找这样的地方来拥有我的值(value)观

c# - 如何在值共享相同名称的枚举之间进行转换?

如果我想在两个Enum类型之间进行转换,我希望它们的值具有相同的名称,是否有一种简洁的方法,或者我必须这样做:enumcolours_a{red,blue,green}enumcolours_b{yellow,red,blue,green}staticvoidMain(string[]args){colours_aa=colours_a.red;colours_bb;//b=a;b=(colours_b)Enum.Parse(typeof(colours_b),a.ToString());}? 最佳答案 如果您对这两个枚举有严格的控

c# - List<T>.Last() 是否枚举集合?

考虑List的边界是已知的,确实.Last()枚举集合?我问这个是因为documentation说它是由Enumerable定义的(在这种情况下,它将需要枚举集合)如果它确实枚举了集合,那么我可以简单地通过索引访问最后一个元素(正如我们所知的.Count的List),但必须这样做似乎很愚蠢。... 最佳答案 如果集合是IEnumerable,它会枚举集合而不是IList(对于数组或列表,将使用索引)。Enumerable.Last通过以下方式实现(ILSpy):publicstaticTSourceLast(thisIEnumera

c# - 将 [Display(Name = "X")] 与枚举一起使用。 MVC3 ASP.Net 中的自定义 HtmlHelper

我正在使用来自另一个stackoverflow问题的代码片段:namespaceMvcHtmlHelpers{publicstaticclasshtmlHelpers{//////Radiobuttonfor:Adaptedtosupportenumlabelsfromdisplayattributes//////////////////publicstaticMvcHtmlStringRadioButtonForEnum(thisHtmlHelperhtmlHelper,Expression>expression){varmetaData=ModelMetadata.FromLamb

c# - 为什么.NET 没有双向枚举器?

关于SO如何实现双向枚举器(here、here)已被问过几次。我的问题不是如何(这对大多数情况来说是微不足道的),而是为什么.NET平台中不存在这样的类型。publicinterfaceIBidirectionalEnumerator:IEnumerator{boolMovePrev();}显然,有许多集合类型无法实现这一点,因为MoveNext()具有破坏性或更改基础集合的状态。但相反,许多类型可以简单地实现这一点(List、IList、LinkedList、array).为什么不存在这样的类型? 最佳答案 当你设计一个框架时,你