如何将我的类隐式转换为另一种类型?

Posted

技术标签:

【中文标题】如何将我的类隐式转换为另一种类型?【英文标题】:How can i implicitly convert my class to another type? 【发布时间】:2011-03-02 06:49:38 【问题描述】:

例如隐式

MyClass myClass = new MyClass();
int i = myClass;

【问题讨论】:

从他的其他问题我猜是.net... 是的:)。我想这次我的问题没有答案,因为我们不能编辑封闭源类,所以我们不能为它们实现隐式运算符。 可能重复 [如何将另一个结构隐式转换为我的类型? ](***.com/questions/3015527/…) 为什么要这样做?在我从事 .NET 的 8 年中,我从来没有这样做过。如果你不能改变类,你总是可以添加一个 ToInt() 扩展方法。当然它更冗长,但我通常喜欢知道发生了什么。 XName 对字符串使用隐式转换,这使得工作更容易。例如 new XElement("person") 而不是 XElement(new XName("person")) 【参考方案1】:

您需要在MyClass 文件中定义它。

public static implicit operator int(MyClass instance) 

    if (instance == null) 
    
        return -1;
    
    return instance._underlyingValue;

【讨论】:

应该是 int? 隐式转换,所以不需要有一个神奇的值吗?特别是如果 -1 可能是合法的基础值。我认为对于这种情况,如果无法进行转换,您可能希望返回 null 或抛出异常。 (显然你的答案符合规范,所以这更像是对规范的质疑,而不是答案。) @Anthony - 原则上,我同意你的看法。在实践中,它高度依赖于所讨论的类。【参考方案2】:
class MyClass 

   public static implicit operator int(MyClass myClass) 
   
      // code to convert from MyClass to int
   

看看那里:implicit

【讨论】:

【参考方案3】:

这个MSDN entry 涵盖了你想要的东西,应该可以解决问题。

【讨论】:

以上是关于如何将我的类隐式转换为另一种类型?的主要内容,如果未能解决你的问题,请参考以下文章

类型转换

Scala 系列(十三)—— 隐式转换和隐式参数

C++ 介绍⁽⁴⁾|C++ 类型转换

将类隐式转换为 int 的正确方法是啥?

scala中隐式转换之总结

JavaScript类型转换总结与常见情况分析