我可以重载从null"c#中的操作符

本文关键字:操作符 quot 重载 null 我可以 | 更新日期: 2023-09-27 18:03:06

我在c#中有一个结构类型。我想把null隐式地转换成这种类型。例如,null可以用一个结构类型的特殊值表示,强制转换操作符应该返回一个具有该值的结构体。

在c++中,可以使用std::nullptr_t类型的隐式强制转换操作符重载。c#中有类似的类型吗?

我有一个想法,使用一个特殊的NullType类没有实例。这是可行的,但看起来有些丑陋。有没有更好的办法?

的例子:

class NullType
{
    private NullType(){} // ensures that no instance will ever be created
}
struct X
{
    private static readonly int nullValue = -1;
    private int val;
    public X(int val){ this.val= val; }
    public static implicit operator X(NullType t)
    { 
        return new X(nullValue);
    }
}
class MainClass
{
     public static void Main(string[] args)
     {
          X x = null; // Works now!
     }
}

我可以重载从null"c#中的操作符

不,转换操作符只允许从类型转换,不允许从类型的特定值转换,即null,因此没有null转换操作符。

不引入自身类型的最佳拟合操作符是:

public static implicit operator X(object t)

但显然你不想用这个。使用它不是很安全(t可以是任何值,也是在异常中处理非空情况的唯一方法)。

也就是说,我认为你现在创建它的方式,使用一个不能初始化的类是最好的方法。事实上,唯一的问题是:为什么你想使用null,而不是'只是'一个默认值实例在你的结构(X.Null)。