gpt4 book ai didi

c# - 隐式转换必须显式使用

转载 作者:行者123 更新时间:2023-11-30 23:07:22 24 4
gpt4 key购买 nike

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

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

仅此运算符就可以让我将一个不可空结构隐式转换为 int,但尝试隐式转换它的可空对应物仍然会引发编译错误:

Cannot implicitly convert type myStruct? to int. An explicit conversion exists (are you missing a cast?)

显然提到的“显式”运算符实际上是我声明的隐式运算符,完全删除此运算符也删除了对显式运算符的提及。

当涉及到可空结构时,为什么我被迫显式地使用这个运算符,即使它被声明为隐式的?


编辑:
所以这是“完整代码”,去掉了不会使编译器错误消失的所有内容。结构保持不变,所有新的是我的测试代码:

using System;

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

public class Sandbox {
void Update ()
{
boilDown nonNullable = new boilDown ();
Nullable<boilDown> NullableVersion = new Nullable<boilDown>();

int MyInt;
MyInt = nonNullable; // this work thanks to my operator
MyInt = NullableVersion; // But this line requires an explicit cast
}
}

版本:
你们都暗示我有一个 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
}
}

关于c# - 隐式转换必须显式使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47373224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com