隐式转换和 null 的问题

发布于 2024-08-16 12:12:55 字数 393 浏览 5 评论 0原文

我有这个函数

public static implicit operator MyClass(string v) { return new MyClass(v); }

并编写 var.myclass = null; 。这调用隐式运算符并将 null 作为字符串传递,这会在我的代码中造成严重破坏(我使用反射并且不想添加特殊情况)。我怎样才能写 myclass = null 而不导致隐式运算符?

我尝试编写

public static implicit operator MyClass(string v) { return  v == null ? null : new MyClass(v); }

但这会导致堆栈溢出

I have this function

public static implicit operator MyClass(string v) { return new MyClass(v); }

and write var.myclass = null;. This calls the implicit operator and passes null as string, which causes havoc in my code (i use reflection and would not like to add a special case). How can i write myclass = null without causing the implicit operator?

I tried writing

public static implicit operator MyClass(string v) { return  v == null ? null : new MyClass(v); }

But that causes a stackoverflow

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡紫姑娘! 2024-08-23 12:12:55

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

尝试编写

if (v == null)
    return null;
else
    return new MyClass(v);

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

请提供更多详细信息。

I believe that your problem is that both sides of the ternary operator must be of the same or compatible types.

Try writing

if (v == null)
    return null;
else
    return new MyClass(v);

EDIT: I can only reproduce your issue if I make MyClass a struct, in which case your question is impossible; a struct cannot be null.

Please provide more details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文