C# 为什么某些unity源代码assign null有一个强制转换操作?;
最近,我发现了一些代码,比如C# 为什么某些unity源代码assign null有一个强制转换操作?;,c#,unity3d,C#,Unity3d,最近,我发现了一些代码,比如materials s_DefaultUI=(Material)null在Unity图形源代码中。但我不知道为什么会有强制转换操作。有什么好处?谢谢你的帮助 将null强制转换为可为null的类型,在显式类型化变量的赋值中,不会做任何事情,也不会更改任何内容,这与根本不强制转换相同,将null强制转换为类型的唯一好处是: 1) 同一方法的多个签名在同一位置具有不同的可空类型,例如: void CheckIfNull(string s); void CheckIfNu
materials s_DefaultUI=(Material)null代码>在Unity图形源代码中。但我不知道为什么会有强制转换操作。有什么好处?谢谢你的帮助 将null
强制转换为可为null的类型,在显式类型化变量的赋值中,不会做任何事情,也不会更改任何内容,这与根本不强制转换相同,将null强制转换为类型的唯一好处是:
1) 同一方法的多个签名在同一位置具有不同的可空类型,例如:
void CheckIfNull(string s);
void CheckIfNull(Material m);
struct StructA
{
public StructA(object obj) { }
public static explicit operator StructA(object obj)
{
return new StructA(obj);
}
}
void Stuff()
{
StructA myStruct = (StructA)null;
}
在这种情况下,执行CheckIfNull(null)
将不起作用,因为它不知道指定的null
应传递给哪个sig,因此执行CheckIfNull((Material)null)
将解决问题
2) 如果您的值类型通过显式转换接受可为null的类型,例如:
void CheckIfNull(string s);
void CheckIfNull(Material m);
struct StructA
{
public StructA(object obj) { }
public static explicit operator StructA(object obj)
{
return new StructA(obj);
}
}
void Stuff()
{
StructA myStruct = (StructA)null;
}
3) 使用隐式类型变量时,如果s_DefaultUI
是var
,则需要强制转换null
,因为var
是自动类型,所以它不知道提供的null
的类型是什么
除此之外,对类型,尤其是类类型强制转换null是没有意义的。这是原始源代码还是反编译器的代码?如果它是一个,那么它可能只是一些反编译器工件。(编辑:删除了关于它可能是var s_DefaultUI=(Material)null;
的建议,因为它是该代码中的字段,所以不能是var)。