Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么某些unity源代码assign null有一个强制转换操作?;_C#_Unity3d - Fatal编程技术网

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)。