【发布时间】:2011-11-06 04:56:15
【问题描述】:
我有一堂有一堆implicit operators 的课。在下面的代码中,只使用了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);
}
}
【问题讨论】:
-
这门课的目的是什么?
-
看起来很危险......可能是有史以来最糟糕的命名类,考虑到它可以做什么。
-
作为注释,在隐式运算符中抛出异常通常不是一个好主意。
-
你为什么不想让类通用?这种类型的场景对于泛化来说是完美的。
-
最好的重构可能是丢弃该类。不要试图粗鲁,但有时改进某些东西的最好方法就是删除它。
标签: c# generics refactoring operators