FOO*_*FOO 2 c# generics refactoring operators
我有一大堆的课implicit operator.在下面的代码中,只使用了几个implicit operators的例子.我正在寻找任何想法如何重构这一点,而不是使SafeValue类通用.有任何想法吗?
public class SafeValue {
private readonly object value;
public SafeValue(object value) {
if (value == somethingSpecial) {
value = null;
}
this.value = value;
}
public static implicit operator string(SafeValue instance) {
return (string)instance.value;
}
public static implicit operator int(SafeValue instance) {
if (instance.value == null) {
throw new InvalidCastException("Cannot convert type");
}
return (int)instance.value;
}
public static implicit operator int?(SafeValue instance) {
if (instance.value == null) {
return null;
}
return new int?((int)instance.value);
}
public static implicit operator DateTime(SafeValue instance)
if (instance.value == null) {
throw new InvalidCastException("Cannot convert type");
}
return (DateTime)instance.value;
}
public static implicit operator DateTime?(SafeValue instance) {
if (instance.value == null) {
return null;
}
return new DateTime?((DateTime)instance.value);
}
}
Run Code Online (Sandbox Code Playgroud)
正如我在评论中所说,我认为最好完全替换代码.
如果这不是一个选项,您可以考虑以下,主要是整容变化:
您可能希望摆脱手动抛出的异常.为什么检查null并抛出异常,如果你在下一行中仍然这样做?无论如何,你在那里抛出异常.将null转换为int 将导致异常.
为什么所有新的?不需要他们.刚演员.
无需将你的Nullables翻倍.
DateTime? dt = (DateTime?) DateTime.Now;
Run Code Online (Sandbox Code Playgroud)按预期工作
DateTime? dt = (DateTime?) null;
Run Code Online (Sandbox Code Playgroud)
也可以工作(这就是你正在做的事情,因为你返回null;在你的函数中,在签名中有一个返回值为DateTime?对吧?
您的所有功能都只减少到一行代码.这是DateTime?一个荣耀:
public static implicit operator DateTime?(SafeValue instance) {
return (DateTime?)instance.value;
}
Run Code Online (Sandbox Code Playgroud)
重复int?等等.
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |