初始化变量,其中null转换为变量的数据类型

时间:2014-10-27 18:09:23

标签: c# types casting null

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

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

程序员是否有一些原因不仅仅是通过以下方式进行初始化:

List<string> list = null;

两者之间有区别吗?

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

4 个答案:

答案 0 :(得分:4)

  

两者之间有区别吗?

没有区别。

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

  

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

不能说。可能是,之前的某些内容与null不同,然后又更改为null

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

答案 1 :(得分:2)

在这种情况下,没有实际差异,两个分配都将编译为完全相同的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的实例。

答案 2 :(得分:1)

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

var list = (List<string>)null;

如果没有施法,你就无法做到。

答案 3 :(得分:0)

不,在上述情况下,你不需要演员。你只需要这样的三元表达式:

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