我可以在C#中重载“cast from null”运算符吗?
发布时间:2020-12-15 22:16:58 所属栏目:百科 来源:网络整理
导读:我在C#中有一个struct类型.我希望能够隐式地将null转换为此类型.例如,null可以由结构类型的特殊值表示,而强制转换运算符应该返回具有此值的结构. 在C中,我可以使用类型为std :: nullptr_t的隐式转换运算符重载. 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,因此没有空转换运算符.
没有引入自己的类型的最佳拟合运算符是这样的: public static implicit operator X(object t) 但显然你不想使用它.它使用起来不是很安全(t可以是任何值,也是在异常中处理非null情况的唯一方法). 也就是说,我认为你现在创建它的方式,使用一个无法初始化的类是最好的方法.实际上唯一的问题是:为什么要在结构(X.Null)上使用null而不是’just’一个默认值实例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |