C# Microsoft正在将null强制转换为类型,是否应该?
我正在根据微软的会员资格资料编写一些定制的身份验证代码。在查看概要文件功能时,我查看了System.Web.dll v4.0.30319中的ProfileBase类。有几个类级变量被声明为类型,但随后被初始化为转换为该类型的空值 比如说,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)
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
来分配内存。它只是声明了一个“指向”零的变量。我的缺点是——它是静态的——在开始之前没有正确地阅读这个问题。