Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft正在将null强制转换为类型,是否应该?_C# - Fatal编程技术网

C# Microsoft正在将null强制转换为类型,是否应该?

C# Microsoft正在将null强制转换为类型,是否应该?,c#,C#,我正在根据微软的会员资格资料编写一些定制的身份验证代码。在查看概要文件功能时,我查看了System.Web.dll v4.0.30319中的ProfileBase类。有几个类级变量被声明为类型,但随后被初始化为转换为该类型的空值 比如说, private static Exception s_InitializeException = (Exception) null; private static ProfileBase s_SingletonInstance = (ProfileBase)

我正在根据微软的会员资格资料编写一些定制的身份验证代码。在查看概要文件功能时,我查看了System.Web.dll v4.0.30319中的ProfileBase类。有几个类级变量被声明为类型,但随后被初始化为转换为该类型的空值

比如说,

private static Exception s_InitializeException = (Exception) null;
private static ProfileBase s_SingletonInstance = (ProfileBase) null;
private static Hashtable s_PropertiesForCompilation = (Hashtable) null;
我通常不会初始化具有类级别作用域的变量。我想知道这是否是我应该做的事情,或者它有什么作用


谢谢你的启发。

这没有意义;我相信
null
总是
null
——我当然想不出任何基于C语言的例子。它可能是生成的代码,而不是像这样显式编写的代码。

该代码的意思是:初始化内存区域以保存一种类型的异常,并将值NULL赋给该变量。因为异常是引用类型,所以它可以为null。将NULL强制转换为异常没有意义。可能是生成的代码?

推荐的做法是在声明静态变量的地方初始化静态变量

以下是实际的Microsoft代码:

    /////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////// 
    // Static data 
    private static SettingsPropertyCollection s_Properties = null;
    private static object s_InitializeLock = new Object(); 
    private static Exception s_InitializeException = null;
    private static bool s_Initialized = false;
    private static ProfileBase s_SingletonInstance = null;
    private static Hashtable s_PropertiesForCompilation = null; 

您可能正在查看分解的代码。 此强制转换可能是由反汇编程序添加的,并且在源代码中不存在


您绝对不必在代码中执行这种类型的强制转换

强制转换由反编译器生成,“官方”源代码具有
null
,但没有强制转换。我认为增加演员阵容没有任何好处

我通常不会初始化具有类级别作用域的变量。我想知道这是否是我应该做的事情,或者它有什么作用


null
(在原始源代码中)似乎主要是一种风格。由于在声明中初始化静态字段通常比较容易,因此添加
null
会增加一点清晰度,即故意不初始化该字段。它还可以用于通过FXCop或类似的样式指南检查。

您是在查看原始源代码还是已分解的源代码?此代码是由Re sharper检索的,因此我确信它已分解了源代码。谢谢。它不是说要初始化任何东西-没有
new
来分配内存。它只是声明了一个“指向”零的变量。我的缺点是——它是静态的——在开始之前没有正确地阅读这个问题。