Tag: 枚举

使用generics方法获取我的枚举属性的List

一开始,我们有这个基本的枚举。 public enum E_Levels { [ValueOfEnum(“Low level”)] LOW, [ValueOfEnum(“Normal level”)] NORMAL, [ValueOfEnum(“High level”)] HIGH } 我想得到一个List 无论枚举 。 类似Extensions.GetValuesOfEnum() ,它可以返回List其中包含“低级别”,“正常级别”和“高级别”。 StackOF帮助我获得了一个值属性: public static class Extensions { public static string ToValueOfEnum(this Enum value) { FieldInfo fieldInfo = value.GetType().GetField(value.ToString()); ValueOfEnum[] attribs = fieldInfo.GetCustomAttributes(typeof(ValueOfEnum), false) as ValueOfEnum[]; return attribs.Length > 0 ? attribs[0].value : null; } } 无论枚举如何,我都可以调用此方法: […]

在foreach循环中更改对象值?

在一个地方,我正在使用字符串列表,在这种情况下,我能够将字符串的值更改为下面给出的代码, foreach(string item in itemlist.ToList()) { item=someValue; //I am able to do this } 但是对于类的对象,我无法改变对象的成员值,代码如下, public class StudentDTO { string name; int rollNo; } studentDTOList=GetDataFromDatabase(); foreach(StudentDTO student in studentDTOList.ToList()) { studentDTO=ChangeName(studentDTO); //Not working } private StudentDTO ChangeName(StudentDTO studentDTO) { studentDTO.name=SomeName; return studentDTO; } 错误是:无法分配,因为它是迭代变量

枚举和表现

我的应用程序有很多不同的查找值,这些值永远不会改变,例如美国各州。 我想使用枚举,而不是将它们放入数据库表中。 但是,我确实意识到这样做需要一些枚举和大量的“int”和“string”来自我的枚举。 另外,我看到有人提到使用Dictionary 作为查找表,但枚举实现似乎更清晰。 所以,我想问一下,保留和传递很多枚举并将它们转化为性能问题,还是应该使用查找表方法,哪个表现更好? 编辑:需要转换为ID以存储在其他数据库表中。

“覆盖”枚举的最佳方法是什么?

可能重复: 枚举“inheritance” 我有许多扩展抽象类的类。 抽象父类使用一组值定义枚举。 一些子类inheritance父类的枚举值,但某些子类需要枚举值不同。 有没有办法以某种方式覆盖这些特定子类的枚举,如果没有,什么是实现我所描述的好方法? class ParentClass { private MyEnum m_EnumVal; public virtual MyEnum EnumVal { get { return m_EnumVal; } set { m_EnumVal = value; } } public enum MyEnum { a, b, c }; } class ChildClass : ParentClass { private MyEnum m_EnumVal; public virtual MyEnum EnumVal { get { return m_EnumVal; […]

是否可以在C#和非托管C ++之间共享枚举声明?

有没有办法在本机(非托管)C ++和(托管)C#之间共享枚举定义? 我在完全非托管代码中使用以下枚举: enum MyEnum { myVal1, myVal2 }; 我们的应用程序有时使用托管组件。 该C#组件通过托管C ++ interop dll(来自本机dll)获取枚举项值为int。 (只有在需要C#组件时才会加载interop dll。)C#组件重复了枚举定义: public enum MyEnum { myVal1, myVal2 }; 有没有办法消除重复,而无需将原生C ++ DLL转换为托管dll?

IEnumerable,IEnumerator vs foreach,何时使用什么

我正在通过IEnumerable和IEnumerator,但是没有明确地得到一点……如果我们有foreach,那么为什么我们需要这两个接口呢? 是否有任何我们必须使用接口的情况。如果是,那么有人可以用一个例子来解释。 欢迎任何建议和评论。 谢谢。

如何为枚举提供用户友好的名称?

我有一个类似的枚举 Enum Complexity { NotSoComplex, LittleComplex, Complex, VeryComplex } 我想在下拉列表中使用它,但不希望在列表中看到这样的Camel名称(对用户来说看起来很奇怪)。 相反,我希望有正常的措辞,如不那么复杂的小复杂(等) 此外,我的应用程序是多语言,我希望能够显示这些字符串本地化,我使用帮助器,TranslationHelper(字符串strID),它给我一个字符串ID的本地化版本。 我有一个工作的解决方案,但不是很优雅:我为枚举创建一个帮助类,其中一个成员Complexity和ToString()被覆盖,如下所示(代码简化) public class ComplexityHelper { public ComplexityHelper(Complexity c, string desc) { m_complex = c; m_desc=desc; } public Complexity Complexity { get { … } set {…} } public override ToString() { return m_desc; } //Then a static field like this private static List […]

将IEnumerator转换为通用IEnumerator的最佳方法是什么?

我正在为C#.NET 3.5中的自定义ConfigurationHandler编写自定义ConfigurationElementCollection,并且我希望将IEnumerator公开为通用IEnumerator。 实现这一目标的最佳方法是什么? 我目前正在使用代码: public new IEnumerator GetEnumerator(){var list = new List(); var baseEnum = base.GetEnumerator(); while(baseEnum.MoveNext()){var obj = baseEnum.Current as GenericObject; if(obj!= null)list.Add(obj); } return list.GetEnumerator(); } 干杯

属性真的有什么作用?

应用[Flags]真的有什么作用? 我知道它会修改Enum.ToString的行为,但它会做什么吗? (例如,不同的编译器或运行时行为等) 编辑 :是的,我知道它记录了枚举旨在用作按位标志的事实,并且将它应用于位标志更合乎逻辑。 我更多地询问具体的行为变化,而不是一般的编程实践。

有人知道快速获取枚举值的自定义属性吗?

这可能是最好的例子。 我有一个属性的枚举: public enum MyEnum { [CustomInfo(“This is a custom attrib”)] None = 0, [CustomInfo(“This is another attrib”)] ValueA, [CustomInfo(“This has an extra flag”, AllowSomething = true)] ValueB, } 我想从实例中获取这些属性: public CustomInfoAttribute GetInfo( MyEnum enumInput ) { Type typeOfEnum = enumInput.GetType(); //this will be typeof( MyEnum ) //here is the problem, GetField takes a string […]