初始化变量,将null强制转换为变量';s数据类型
本文关键字:变量 数据类型 null 初始化 转换 | 更新日期: 2023-09-27 18:28:10
我遇到了一些这样的代码:
List<string> list = (List<string>)null;
程序员不只是通过进行初始化,这是有什么原因吗
List<string> list = null;
两者之间有区别吗?
这是从另一种编程语言迁移过来的习惯吗?也许是C、C++或Java?
两者之间有区别吗?
不,没有区别。
在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;