我遇到了一些像这样的代码:
List<string> list = (List<string>)null;
程序员是否有一些原因不仅仅是通过以下方式进行初始化:
List<string> list = null;
两者之间有区别吗?
这是从另一种编程语言迁移的习惯吗?也许C,C ++或Java?
答案 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;