C# 隐式转换必须显式使用

C# 隐式转换必须显式使用,c#,unity3d,struct,nullable,implicit-conversion,C#,Unity3d,Struct,Nullable,Implicit Conversion,我有一个声明了以下运算符的结构: public struct myStruct { public static implicit operator int(Nullable<myStruct> m){ /*...*/ } } 版本: 你们都暗示我有c版本的问题。 我正在开发Unity 2017.1.0f3,它使用的是Mono 2.0.50727.1433,而不是.Net。(这显然是一个NET3.5等效版本,但即使是他们的实验性NET4.6等效版本也

我有一个声明了以下运算符的结构:

public struct myStruct {
    public static implicit operator int(Nullable<myStruct> m){
        /*...*/
    }
}

版本:
你们都暗示我有c版本的问题。 我正在开发Unity 2017.1.0f3,它使用的是Mono 2.0.50727.1433,而不是.Net。(这显然是一个NET3.5等效版本,但即使是他们的实验性NET4.6等效版本也有这个问题。)

我会问他们这个问题,看看他们怎么说。

您可以显式地将
NullableVersion
强制转换为
int
,如下所示

using System;

public struct boilDown {
    public static implicit operator int(Nullable<boilDown> s) { return 0; }
} // END Struct

public class Sandbox {
    static void Main()
    {

    }
    void Update ()
    {
        boilDown nonNullable = new boilDown ();
        Nullable<boilDown> NullableVersion = new Nullable<boilDown>();

        int MyInt;
        MyInt = nonNullable;        // this work thanks to my operator
        MyInt = (int)NullableVersion;    // works now
    }
}
使用系统;
公共结构boilDown{
公共静态隐式运算符int(可为null的s){return 0;}
}//结束结构
公共类沙箱{
静态void Main()
{
}
无效更新()
{
boilDown NONULLABLE=新boilDown();
Nullable NullableVersion=新的Nullable();
int-MyInt;
MyInt=nonNullable;//这项工作要感谢我的运算符
MyInt=(int)NullableVersion;//现在可以工作了
}
}

谢谢所有告诉我应该编译此代码的人。

Unity确认这是一个错误。

用“int”试试看,给我们完整的代码。完整的代码马上就来。在把它归结为bug之后,在结构本身中没有什么新的东西可以看到,只有测试代码?控制台应用程序4.6.1可以使用,没有错误或警告。对于4.5-也很好…我知道我可以进行显式转换,但为什么隐式转换不起作用?很可能是因为您创建了一个可为空的版本。您上面的代码在.NET 4.5+中也很好,您运行的是哪个版本的.NET?
using System;

public struct boilDown {
    public static implicit operator int(Nullable<boilDown> s) { return 0; }
} // END Struct

public class Sandbox {
    static void Main()
    {

    }
    void Update ()
    {
        boilDown nonNullable = new boilDown ();
        Nullable<boilDown> NullableVersion = new Nullable<boilDown>();

        int MyInt;
        MyInt = nonNullable;        // this work thanks to my operator
        MyInt = (int)NullableVersion;    // works now
    }
}