初始化变量,将null强制转换为变量';s数据类型

本文关键字:变量 数据类型 null 初始化 转换 | 更新日期: 2023-09-27 18:28:10

我遇到了一些这样的代码:

List<string> list = (List<string>)null;

程序员不只是通过进行初始化,这是有什么原因吗

List<string> list = null;

两者之间有区别吗?

这是从另一种编程语言迁移过来的习惯吗?也许是C、C++或Java?

初始化变量,将null强制转换为变量';s数据类型

两者之间有区别吗?

不,没有区别。

在ILSpy中,此行List<string> list = (List<string>)null;变为List<string> list = null;

这是从另一种编程语言迁移过来的习惯吗?

不能说。可能是,早些时候有一些不同于null的东西,然后它被改为null

List<string> list = (List<string>) Session["List"];

在这种情况下,没有实际的区别,两个赋值都将编译为完全相同的MSIL操作码然而,有一种情况下,强制转换null确实会有所不同,那就是在调用重载方法时。

class A { }
class B { }
class C
{
    public static void Foo( A value );
    public static void Foo( B value );
}

简单地调用C.Foo( null );是不明确的,编译器无法判断您要调用哪个,但如果您首先强制转换null:C.Foo( (A)null );,那么现在很明显,您的意思是调用第一个重载,但传递null而不是A的实例。

这两行代码没有区别。我认为这是品味问题。尽管如果您使用强制转换,您可以从变量中删除类型,如下所示:

var list = (List<string>)null;

没有铸造你就做不到。

不,在上述情况下,您不需要强制转换。你只需要它在这样的三元表达式中:

return somecondition ? new List<string>() : (List<string>)null;