【问题标题】:Problem with implicit conversion and null隐式转换和 null 的问题
【发布时间】:2010-01-06 01:27:11
【问题描述】:

我有这个功能

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); }

但这会导致堆栈溢出

【问题讨论】:

  • MyClass 是一个结构体吗?你的构造函数接受什么参数?
  • 你能把它写成显式运算符吗?
  • 我无法重现您的问题;您可能还有其他问题。
  • d'哦,这是有道理的。你不能有一个空结构。

标签: c# operator-overloading implicit-conversion


【解决方案1】:

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

试着写

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

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

请提供更多详细信息。

【讨论】:

  • 您正在考虑编译时错误,可以通过将其更改为: return v == null 来修复它? (MyClass)null : 新的 MyClass(v);堆栈溢出很可能是运行时错误,它会递归调用隐式运算符。
  • 这是一个隐式转换 - 编译器会自动插入 (MyClass)
  • 非常感谢 :) 你得到了我的回答,而我提供了不正确的细节!
猜你喜欢
  • 2019-03-04
  • 2014-02-28
  • 2019-04-01
  • 1970-01-01
  • 2023-03-17
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多