我已经阅读了各地const和static readonly各个领域.我们有一些只包含常量值的类.用于我们系统中的各种事物.所以我想知道我的观察结果是否正确:
这些常量值是否应始终static readonly适用于所有公开的内容?并且仅const用于内部/受保护/私有值?
您有什么推荐的吗?我是否可能甚至不使用static readonly字段,而是使用属性?
我听说该static_cast函数应该优先于C风格或简单的函数式转换.这是真的?为什么?
我想创建一个泛型方法,用于将任何System.Enum派生类型转换为其对应的整数值,而不进行转换,最好不解析字符串.
例如,我想要的是这样的:
// Trivial example, not actually what I'm doing.
class Converter
{
int ToInteger(System.Enum anEnum)
{
(int)anEnum;
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.Resharper报告您无法将类型为"System.Enum"的表达式转换为"int"类型.
现在我已经提出了这个解决方案,但我宁愿提高效率.
class Converter
{
int ToInteger(System.Enum anEnum)
{
return int.Parse(anEnum.ToString("d"));
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有一个枚举
public enum INFLOW_SEARCH_ON
{
ON_ENTITY_HANDLE = 0,
ON_LABEL = 1,
ON_NODE_HANDLE = 2
} // enum INFLOW_SEARCH_ON
Run Code Online (Sandbox Code Playgroud)
我必须使用这个枚举来在网格列中进行搜索
获取我正在使用的列索引
MyEnumVariable.GetHashCode()
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,或者我应该使用
(short)MyEnumVariable
Run Code Online (Sandbox Code Playgroud)
我对使用GetHashCode()感到困惑.使用它有什么问题吗?
我正在尝试创建一个函数,我们可以获得EnumValue的Namevalue
例如:
Get_Enum_ValueName(DayOfWeek, 0)
Run Code Online (Sandbox Code Playgroud)
......这将返回" 星期天 ".
但我的代码不起作用,它说类型没有定义:
Private Function Get_Enum_ValueName(Of T)(ByVal EnumName As T, ByVal EnumValue As Integer) As String
Return DirectCast([Enum].Parse(GetType(EnumName), EnumValue ), EnumName).ToString
End Function
Run Code Online (Sandbox Code Playgroud) 我不能在两种转换方法之间进行选择.从枚举转换为int的最佳实践是什么?
1:
public static int EnumToInt(Enum enumValue)
{
return Convert.ToInt32(enumValue);
}
Run Code Online (Sandbox Code Playgroud)
2:
public static int EnumToInt(Enum enumValue)
{
return (int)(ValueType)enumValue;
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一些带有基于Enum值的简单switch语句的代码.在我看来,在将来某个时候开发人员可能会添加一个新值,所以我在运行时包含了一个默认方法来捕获它并抛出异常.但是我意识到每次输入这样的逻辑时我都应该这样做,并且我只在运行时看到这些问题而不是编译时间.
我想知道是否有一些我可以添加的代码让编译器告诉开发人员他们需要在更新枚举值的情况下更新某些方法 - 除了向枚举本身添加注释之外?
例如(以下示例纯粹是理论上的;我选择了开发生命周期中的状态,以确保它对大多数人来说是熟悉的).
public enum DevelopmentStatusEnum
{
Development
//, QA //this may be added at some point in the future (or any other status could be)
, SIT
, UAT
, Production
}
public class Example
{
public void ExampleMethod(DevelopmentStatusEnum status)
{
switch (status)
{
case DevelopmentStatusEnum.Development: DoSomething(); break;
case DevelopmentStatusEnum.SIT: DoSomething(); break;
case DevelopmentStatusEnum.UAT: DoSomething(); break;
case DevelopmentStatusEnum.Production: DoSomething(); break;
default: throw new StupidProgrammerException(); //I'd like the compiler to ensure that this line never runs, even if …Run Code Online (Sandbox Code Playgroud) 可能重复:
枚举返回int值
如何从枚举中获取数值?
这不是这些的重复,感谢阅读问题模式
假设我选择了许多标志枚举项:
[Flags]
public enum Options
{
None = 0,
Option_A = 1,
Option_B = 2,
Option_C = 4,
Option_D = 8,
}
Options selected = Options.Option_A | Options.Option_B;
Run Code Online (Sandbox Code Playgroud)
值selected应该对应于3(即2 + 1)
我怎样才能把它变成一个int?
我已经看到了selected将ToString()和split()转换为每个选项的示例,例如
"Option_A | Option_B" --> { "Option_A", "Option_B" },
Run Code Online (Sandbox Code Playgroud)
然后重新组合成各自的Enum,并从中获取值,但它有点凌乱.是否有更直接的方法来获得这些值的总和?
如果我有值:"dog"和枚举:
public enum Animals
{
dog = 0 ,
cat = 1 ,
rat = 2
}
Run Code Online (Sandbox Code Playgroud)
我怎么能从动物的价值"狗"得到0?
编辑:
我想知道是否有像索引这样的索引.更常见的是:如何获取字符串值的整数.
enums ×8
c# ×7
.net ×2
casting ×2
c#-4.0 ×1
c++ ×1
constants ×1
enum-flags ×1
enumeration ×1
gethashcode ×1
vb.net ×1