我有一堂课叫做Questions
(复数)。在此类中,有一个名为Question
(单数)的枚举,它看起来像这样。
C#格式化字符串,日期
有时候我们要对时间进行转换,达到不同的显示效果
如果要换成成--6或更多的该怎么办呢
参数format格式详细用法
格式字符 关联属性/说明
f 完整日期和时间(长日期和短时间)
g 常规(短日期和短时间)
G 常规(短日期和长时间)
U 使用通用时间的完整日期和时间(长日期和长时间)
下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有
我有一堂课叫做Questions
(复数)。在此类中,有一个名为Question
(单数)的枚举,它看起来像这样。
上面的代码适用于您在野外看到的绝大多数枚举,因为枚举的默认基础类型是int
。
但是,正如指出的那样,枚举可以具有不同的基础类型。如果枚举被声明为uint
,long
,或ulong
,应当投射到枚举的类型; 例如
由于枚举可以是任何整数类型(byte
,int
,short
等),更鲁棒的方式来获得的枚举的基本积分值将是使使用的GetTypeCode
方法与结合Convert
类:
无论基础整数类型如何,这都应该起作用。
将其声明为具有公共常量的静态类:
然后,您可以将其引用为Question.Role
,并且它始终求值为int
或您定义为的任何值。
与此相关的是,如果您想从中获取int
值System.Enum
,请e
在此处给出:
最后两个很丑陋。我喜欢第一个。
比您想象的要容易-枚举已经是一个int。它只需要提醒:
并在后面的代码中获取枚举值:
枚举将增加1,您可以设置起始值。如果不设置起始值,则初始值将被分配为0。
最近,我不再使用代码中的枚举,而是改为使用具有受保护的构造函数和预定义的静态实例的类(这要归功于Roelof- )。
有鉴于此,以下是我现在如何解决此问题的方法(包括隐式转换为或从转换为int
)。
这种方法的优点是您可以从枚举中获得所有内容,但是您的代码现在更加灵活,因此,如果需要根据的值执行不同的操作Question
,则可以将逻辑放入Question
自身(即,在首选的OO中)时尚),而不是在整个代码中放置大量case语句来解决每种情况。
注意:答案已于更新,以利用C#6功能; 即声明表达式和lambda表达式主体定义。有关原始代码,请参见。这样做的好处是使定义不再那么冗长。这是对该答案方法的主要抱怨之一。
如果要获取存储在变量中的枚举值的整数(该类型的类型为)Question
,例如要在方法中使用,则可以简单地执行我在此示例中编写的操作:
要确保存在枚举值然后进行解析,您还可以执行以下操作。
也许我错过了,但是有人尝试过一种简单的通用扩展方法吗?
这对我来说很棒。您可以通过这种方式避免在API中进行类型转换,但最终会导致更改类型操作。这是对进行编程以使编译器为您创建GetValue <T>方法的一个很好的例子。
...是一个很好的声明。
您必须将结果强制转换为int,如下所示:
这种严格程度是C#方式。
一种替代方法是改为使用类声明:
声明起来不太优雅,但是您无需将其强制转换为代码:
另外,您可能对Visual Basic感到更自在,Visual Basic在许多方面都可以满足这种期望。
您可以通过对定义的枚举类型实现来做到这一点:
这简化了获取当前枚举值的int值的操作:
仅当枚举适合于时,这才是正确的int
。
由于可以用多种基本类型声明枚举,所以泛型转换任何枚举类型的通用方法可能会很有用。
我最喜欢的带有int或更小的枚举的hack:
它对于基于长枚举的枚举不起作用。
我能想到的最简单的解决方案是重载这样的Get(int)
方法:
其中[modifiers]
通常可以是相同的Get(int)
方法。如果您无法编辑Questions
该类或由于某种原因而不想这样做,则可以通过编写扩展来重载该方法:
我想建议“从枚举中获取'int'值”的示例是
试试这个,而不是将enum转换为int:
我想出了这种扩展方法,其中包括当前的语言功能。通过使用动态,我不需要使它成为通用方法并指定使调用更简单和一致的类型:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。