隐式转换问题和null

5 c# operator-overloading implicit-conversion

我有这个功能

public static implicit operator MyClass(string v) { return new MyClass(v); }
Run Code Online (Sandbox Code Playgroud)

并写var.myclass = null;.这会调用隐式运算符并将null作为字符串传递,这会在我的代码中造成破坏(我使用反射并且不想添加特殊情况).如何在不引起隐式运算符的情况下编写myclass = null?

我试着写作

public static implicit operator MyClass(string v) { return  v == null ? null : new MyClass(v); }
Run Code Online (Sandbox Code Playgroud)

但这会导致堆栈溢出

SLa*_*aks 5

我相信你的问题是三元运算符的两边必须是相同或兼容的类型.

试着写

if (v == null)
    return null;
else
    return new MyClass(v);
Run Code Online (Sandbox Code Playgroud)

编辑:如果我制作MyClass一个结构,我只能重现你的问题,在这种情况下你的问题是不可能的; 结构不能为空.

请提供更多详情.

  • 这是一个隐式转换 - 编译器会自动插入`(MyClass)` (2认同)