出于教育目的,我会做很多事情(可能从未使用过)。其中一个引导我解决我不喜欢的问题。
让我们说,我有两个班级:
class ClassA
{
public int MyInt;
public string MyString;
}
class ClassB
{
public int SomeInt;
}
现在我想隐式地将ClassA转换为ClassB。要做到这一点,我可以写:
public static implicit operator ClassB(ClassA obj1)
{
ClassB obj2 = new ClassB();
obj2.SomeInt = obj1.MyInt;
return obj2;
}
但是MyString
可能会丢失,这是不允许的。为了解决这个问题,我已添加到我的转换中:
if (obj1.MyString != null)
throw new DataLostException();
这很好用,但必须有更简单的解决方案。我的问题是,如何以更简单的方式处理这种数据丢失?
答案 0 :(得分:1)
你实际上正在做我称之为upcast的内容,但是没有常规继承模型(因为常规upcast将是B扩展A)。向上倾斜可能导致数据范围变窄。如果你向一个功能较少的课程进行向上翻译,那么你希望你的信息会更少,这就是它的工作原理。如果你使用类A作为类a没有mystring,你不关心mystring。
答案 1 :(得分:1)
您的解决方案是正确的。创建用户定义的转换运算符时,此类数据丢失是“默认行为”,这是对该语言的相对高级用法。
这两个类之间没有继承关系,框架无法知道该字符串与另一个类的关系。谁知道,它可能是一个在新环境中完全没有必要的诊断信息。