相关疑难解决方法(0)

获得Enum价值的属性

我想知道是否可以获取枚举值的属性而不是枚举本身的属性?例如,假设我有以下枚举:

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}
Run Code Online (Sandbox Code Playgroud)

我想要的是枚举类型,产生2元组的枚举字符串值及其描述.

价值很容易:

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
Run Code Online (Sandbox Code Playgroud)

但是如何获取描述属性的值,以填充Tuple.Desc?如果属性属于枚举本身,我可以想到如何做到这一点,但我不知道如何从枚举的值中获取它.

c# reflection enums .net-attributes

453
推荐指数
9
解决办法
27万
查看次数

C#中的私有内部类 - 为什么不经常使用它们?

我对C#比较陌生,每次我开始研究C#项目(我只用C#中几乎成熟的项目)我想知道为什么没有内部类?

也许我不明白他们的目标.对我来说,内部类 - 至少是私有内部类 - 看起来很像Pascal/Modula-2/Ada中的"内部程序":它们允许在较小的部分中分解主类以便于理解.

示例:这是大多数时间看到的内容:

public class ClassA
{
   public MethodA()
   {
      <some code>
      myObjectClassB.DoSomething(); // ClassB is only used by ClassA
      <some code>
   }
}

public class ClassB
{
   public DoSomething()
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

由于ClassB只会被ClassA使用(至少有一段时间),我猜这个代码会更好地表达如下:

   public class ClassA
   {
      public MethodA()
      {
         <some code>
         myObjectClassB.DoSomething(); // Class B is only usable by ClassA
         <some code>
      }

      private class ClassB
      {
         public DoSomething()
         {
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

我很高兴收到你关于这个主题的消息 - 我是对的吗?

c# scope inner-classes

74
推荐指数
3
解决办法
6万
查看次数

27
推荐指数
4
解决办法
1万
查看次数

在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;
        }

    }
Run Code Online (Sandbox Code Playgroud)

有没有办法在c#中做类似的事情,或者c#中的枚举更有限

c# enums

14
推荐指数
2
解决办法
4万
查看次数

C#中的私有值标记枚举

我在C#中创建了一个标志枚举,类似于以下内容:

    [Flags]
    public enum DriversLicenseFlags
    {
        None = 0,

        Suspended = 1 << 1,
        Revoked   = 1 << 2,

        Restored  = 1 << 3,
        SuspendedAndRestored = Suspended | Restored,
        RevokedAndRestored   = Revoked   | Restored,
    }
Run Code Online (Sandbox Code Playgroud)

关于我的意图的一些注意事项:

  • Suspended并且Revoked是可以但不一定导致恢复的独特状态.
  • Restored应该只有在用户已经SuspendedRevoked(或两者都有)的情况下才有可能.重要的是要具体跟踪哪个事件是恢复的前兆.
  • 许可证可以是SuspendedRevoked(和Restored)

另外,我试图坚持在MSDN的Designing Flags Enumerations中提出的建议.特别是:

  • 考虑为常用的标志组合提供特殊的枚举值.
    • SuspendedAndRestored并且RevokedAndRestored两者都很常见.
  • 当某些值组合无效时,请避免创建标志枚举.
    • 这是我的问题,因为Restored除非至少有一个是无效的Suspended,并Revoked设置.

理想情况下,我希望Restored在内部使用的枚举中存在一个值,但只能通过某些有效组合公开设置.不幸的是,internal它不是枚举值的有效修饰符.

我想过几个选择,但每个似乎都有缺点:

  1. 保留Restored作为公共值,请注意注释中的限制,并对公共API上的无效组合进行前置条件检查. …

c# enums flags design-patterns

6
推荐指数
1
解决办法
2080
查看次数

如何声明一个泛型类型使用的枚举?

我想在父抽象类中声明以下内容:

  public abstract void RefreshDisplay<TView>(Enum value);
Run Code Online (Sandbox Code Playgroud)

然后将在子类中实现,如:

   public override void RefreshDisplay<RxViewModel>(RxViews view)
Run Code Online (Sandbox Code Playgroud)

其中RxViews是枚举,并从该枚举"查看"特定值.

直到运行时才会知道它来自的实际视图和枚举.

可以这样做吗?我很感激帮助.

编辑:我可能会问这个错误.TView不是枚举,而是从ViewModelBase继承的视图.(我不知道这是一个重复的问题?)谢谢.

编辑:我猜这是在4.5中修复的.任何想法如何在net 4.0中解决这个问题?

c# generics

4
推荐指数
1
解决办法
8679
查看次数

C#中的DefaultValue属性

我想在DefaultValue属性上使用来定义我在App中编写的自定义类的默认值.该类在他的约束器中给出一个字符串.我写了以下内容:

[DefaultValue(Type.GetType("MyClass"),"hello world")] 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行这个应用程序时.我给出错误:

"属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式".

任何人都可以解释我的问题是什么?

c# attributes

1
推荐指数
1
解决办法
2886
查看次数

枚举,为枚举值赋值

可能重复:
如何将枚举值转换为int?

我正在尝试为我的枚举分配值,例如:

enum it { one=5,two=7};
Run Code Online (Sandbox Code Playgroud)

我无法相信我不记得该怎么做.

有人能帮帮我吗?

非常感谢你

java

0
推荐指数
1
解决办法
285
查看次数