使用用户定义的转换时的数据丢失处理。 C#

时间:2012-06-11 10:40:06

标签: c# casting

出于教育目的,我会做很多事情(可能从未使用过)。其中一个引导我解决我不喜欢的问题。

让我们说,我有两个班级:

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();

这很好用,但必须有更简单的解决方案。我的问题是,如何以更简单的方式处理这种数据丢失?

2 个答案:

答案 0 :(得分:1)

你实际上正在做我称之为upcast的内容,但是没有常规继承模型(因为常规upcast将是B扩展A)。向上倾斜可能导致数据范围变窄。如果你向一个功能较少的课程进行向上翻译,那么你希望你的信息会更少,这就是它的工作原理。如果你使用类A作为类a没有mystring,你不关心mystring。

答案 1 :(得分:1)

您的解决方案是正确的。创建用户定义的转换运算符时,此类数据丢失是“默认行为”,这是对该语言的相对高级用法。

这两个类之间没有继承关系,框架无法知道该字符串与另一个类的关系。谁知道,它可能是一个在新环境中完全没有必要的诊断信息。