Tag: enums

C#Enum标志比较

鉴于以下标志, [Flags] public enum Operations { add = 1, subtract = 2, multiply = 4, divide = 8, eval = 16, } 如何实现IF条件来执行每个操作? 在我的尝试中,第一个条件适用于add,eval ,这是正确的。 然而,第一个条件也适用于减法,eval ,这是不正确的。 public double Evaluate(double input) { if ((operation & (Operations.add & Operations.eval)) == (Operations.add & Operations.eval)) currentResult += input; else if ((operation & (Operations.subtract & Operations.eval)) == (Operations.subtract & […]

Linq返回列表或单个对象

我有像这样的Linq to Entities查询: var results = from r in entities.MachineRevision where r.Machine.IdMachine == pIdMachine && r.Category == (int)pCategory select r; 通常,我使用下面的代码检查是否返回了一些结果: if (results.Count() > 0) { return new oMachineRevision(results.First().IdMachineRevision); } 但是,我在if条件中得到NotSupportedException 。 错误消息是: 无法创建类型为“Closure type”的常量值。 在此上下文中仅支持基本类型(例如Int32,String和Guid’)。 请注意, pCategory是Enum类型。

原始类型枚举 – 它是否存在

我需要向用户提供所有可用原始类型的列表,并且想知道.net库中是否存在具有所有原始类型的Enum,因此我不必构建一个。

C#中的枚举和combobox

我目前正在开发一个C#应用程序。 我需要使用带有combobox的枚举来获取所选月份。 我有以下内容来创建枚举: enum Months { January = 1, February, March, April, May, June, July, August, September, October, November, December }; 然后我使用以下内容初始化combobox: cboMonthFrom.Items.AddRange(Enum.GetNames(typeof(Months))); 这段代码工作正常,但问题是当我尝试获取所选月份的选定枚举值 为了从combobox中获取枚举器的值,我使用了以下内容: private void cboMonthFrom_SelectedIndexChanged(object sender, EventArgs) { Months selectedMonth = (Months)cboMonthFrom.SelectedItem; Console.WriteLine(“Selected Month: ” + (int)selectedMonth); } 但是,当我尝试运行上面的代码时,会出现一个错误,指出发生System.InvalidCastException类型的第一次机会exception。 我做错了什么。 感谢您的任何帮助,您可以提供

C#Keys Enumeration Confused:Keys.Alt或Keys.RButton | Keys.ShiftKey | Keys.Alt

我试图测试Alt键是否被按下。 我的检查类似于: private void ProcessCmdKey(Keys keyData) { if (keyData == Keys.Alt) { System.Console.WriteLine (“Alt Key Pressed”); } } 无论如何我不知道当我按下Alt键的时候,调试器告诉我按下的键实际上是Keys.RButton | Keys.ShiftKey | Keys.Alt 任何人都可以了解正在发生的事情或者可能指向一篇可以解释的文章吗? 谢谢FZ 编辑:我仍然有点迷失为什么ENUM会设置其他位值而不是简单的Alt键? 我知道enum可以包含多个带有标志attrivbute的状态,但是如果我按下的所有内容都是Alt,我不知道为什么会这样做?

具有默认值的Asp.net webapi枚举参数

我有一个控制器 [HttpGet] [RoutePrefix(“api/products/{productId}”)] public HttpResponseMessage Products(int productId,TypeEnum ptype=TypeEnum.Clothes) { if(!Enum.IsDefined(typeOf(TypeEnum),ptype)) //throw bad request exception else //continue processing } Myenum被宣布为 public TypeEnum { Clothes, Toys, Electronics } 目前,如果传递了一些垃圾值,它将被转换为默认值。 我想要做的是如果我将控制器称为api / products / 1,那么应该为ptype指定默认值即衣服。 如果我将控制器称为api / products / 1?pType = somegarbagevalue,那么控制器应抛出错误的请求exception。 我怎样才能做到这一点?

使用EnumMemberAttribute并执行自动字符串转换

我有以下代码 [DataContract] public enum StatusType { [EnumMember(Value = “A”)] All, [EnumMember(Value = “I”)] InProcess, [EnumMember(Value = “C”)] Complete, } 我想做以下事情: var s = “C”; StatusType status = SerializerHelper.ToEnum(s); //status is now StatusType.Complete string newString = SerializerHelper.ToEnumString(status); //newString is now “C” 我已经使用DataContractSerializer完成了第二部分(参见下面的代码),但它似乎做了很多工作。 我错过了一些明显的东西吗 想法? 谢谢。 public static string ToEnumString(T type) { string s; using (var ms […]

在c#中扩展枚举

在java中我用来扩展枚举值或重写这样的方法: enum SomeEnum { option1(“sv”) { public String toString() { return “Some value”; } }, option2; private String PassedValue; public SomeEnum(String somevalue) { this.PassedValue = somevalue; } public SomeEnum() { this.PassedValue = “Default Value”; } public String getPassedValue() { return this.PassedValue; } } 有没有办法在c#中做类似的事情,或者c#中的枚举更有限

在任何地方查找枚举都将转换为字符串

我正在尝试在解决方案中随处找到特定枚举转换为字符串的方法,无论是否显式调用ToString()。 (这些正被替换为使用枚举描述的转换,以改善混淆。) 示例:我想找到一些代码,例如string str = “Value: ” + SomeEnum.someValue; 我已经尝试用包装类替换enum本身,包含隐式转换到枚举类型并覆盖包装类中的ToString(),但是当我尝试搜索ToString()覆盖的使用时,它给了我一个位置列表在任何东西上调用ToString()的解决方案(只有在显式调用它的地方)。 搜索是在Visual Studio中使用ReSharper完成的。 有没有其他方法可以找到这些枚举到字符串的转换? 手动完成整个解决方案听起来并不是很有趣。

比较C#中的枚举标志

我需要检测是否在枚举值中设置了一个标志,哪个类型用Flag属性标记。 通常它是这样的: (value & flag) == flag 但是因为我需要通用generics(有时在运行时我的事件只有一个“Enum”引用。我找不到一个简单的方法来使用&运算符。目前我这样做: public static bool IsSet(this T value, T flags) where T : Enum { Type numberType = Enum.GetUnderlyingType(typeof(T)); if (numberType.Equals(typeof(int))) { return BoxUnbox(value, flags, (a, b) => (a & b) == b); } else if (numberType.Equals(typeof(sbyte))) { return BoxUnbox(value, flags, (a, b) => (a & b) == b); […]