我想知道是否可以获取枚举值的属性而不是枚举本身的属性?例如,假设我有以下枚举:
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#比较陌生,每次我开始研究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)
我很高兴收到你关于这个主题的消息 - 我是对的吗?
在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#中创建了一个标志枚举,类似于以下内容:
[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应该只有在用户已经Suspended或Revoked(或两者都有)的情况下才有可能.重要的是要具体跟踪哪个事件是恢复的前兆.Suspended和Revoked(和Restored)另外,我试图坚持在MSDN的Designing Flags Enumerations中提出的建议.特别是:
SuspendedAndRestored并且RevokedAndRestored两者都很常见.Restored除非至少有一个是无效的Suspended,并Revoked设置.理想情况下,我希望Restored在内部使用的枚举中存在一个值,但只能通过某些有效组合公开设置.不幸的是,internal它不是枚举值的有效修饰符.
我想过几个选择,但每个似乎都有缺点:
保留Restored作为公共值,请注意注释中的限制,并对公共API上的无效组合进行前置条件检查. …
我想在父抽象类中声明以下内容:
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中解决这个问题?
我想在DefaultValue属性上使用来定义我在App中编写的自定义类的默认值.该类在他的约束器中给出一个字符串.我写了以下内容:
[DefaultValue(Type.GetType("MyClass"),"hello world")]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行这个应用程序时.我给出错误:
"属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式".
任何人都可以解释我的问题是什么?
可能重复:
如何将枚举值转换为int?
我正在尝试为我的枚举分配值,例如:
enum it { one=5,two=7};
Run Code Online (Sandbox Code Playgroud)
我无法相信我不记得该怎么做.
有人能帮帮我吗?
非常感谢你