相关疑难解决方法(0)

装箱/拆箱和铸造有什么区别?

装箱/拆箱和铸造有什么区别?

通常,这些术语似乎可以互换使用.

.net boxing unboxing casting

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

何时使用枚举,何时用静态成员替换它们?

最近发生了以下(样本)枚举......

enum Color
{
    Red,
    Green,
    Yellow,
    Blue
}
Run Code Online (Sandbox Code Playgroud)

......可以用看似更加类型安全的类替换:

class Color
{
    private Color() { }

    public static readonly Color   Red      = new Color();
    public static readonly Color   Green    = new Color();
    public static readonly Color   Yellow   = new Color();
    public static readonly Color   Blue     = new Color();
}
Run Code Online (Sandbox Code Playgroud)

对于"类型安全",我的意思是如果Color是枚举,则以下语句将起作用,但如果Color是上述类则不行:

var nonsenseColor = (Color)17;    // works if Color is an enum
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)这种模式是否有广泛接受的名称(用类型安全类替换枚举)?

2)在哪种情况下应该使用枚举,什么时候更合适?

c# polymorphism enums static-members

33
推荐指数
1
解决办法
3万
查看次数

.NET装箱/拆箱与铸造性能

我试图从性能的角度理解两种解决方案中哪一种更受欢迎.例如,我有两段代码:

1)拳击/拆箱

int val = 5;
Session["key"] = val; 
int val2 = (int)Session["key"];
Run Code Online (Sandbox Code Playgroud)

2)Casting(IntObj有int属性来存储int)

IntObj val = new IntObj(5);  
Session["key"] = val;
int val2 = ((IntObj )Session["key"]).Value;
Run Code Online (Sandbox Code Playgroud)

这些例子之间的内存管理差异是什么?有没有更快的方法来执行此类操作?

注意: Session例如,它可以是任何Dictionary<string, object>

.net c# performance

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