[英]Can I overload a “cast from null” operator in C#?
我在C#中有一个struct类型。 我希望能够隐式地将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
,因此没有null
转换运算符。
没有引入自己的类型的最佳拟合运算符是这样的:
public static implicit operator X(object t)
但显然你不想使用它。 它使用起来不是很安全( t
可以是任何值,也是在异常中处理非null情况的唯一方法)。
也就是说,我认为你现在创建它的方式,使用一个无法初始化的类是最好的方法。 实际上唯一的问题是:为什么要在结构( X.Null
)上使用null
而不是'just'一个默认值实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.