C# 隐式setter重置其他值

C# 隐式setter重置其他值,c#,operator-overloading,implicit,C#,Operator Overloading,Implicit,我有一个包含两个双变量的类。并添加了隐式运算符 public class MyClass { public double A { get; set; } public double B { get; set; } static public implicit operator MyClass(double value) { return new MyClass{ A = value }; } static publ

我有一个包含两个双变量的类。并添加了隐式运算符

public class MyClass
{
     public double A { get; set; }
     public double B { get; set; }

     static public implicit operator MyClass(double value)
     {
         return new MyClass{ A = value };
     }

     static public implicit operator double(MyClass classObject)
     {
         return classObject.A;
     }
}
我想要的是,当我指定一个双精度值时,它会设置一个MyClass对象的值。当我得到一个双精度值时,它返回一个MyClass对象的值

1. var taget = new MyClass { A = 1.0, B = 2.0 };
2. target = 3.0;
3. double ValA = target;
4. double ValB = target.B;
在这个代码示例中,我创建了一个对象,分配了A和B。现在在第2行中,我想要这个目标。A设置为3,但B值仍然保持为2。但是第2行重置了B值。因此,在代码执行之后,ValA有3.0(如预期的那样),但是ValB有0.0


我应该如何保持旧值?

您正在更改目标变量:

target = 3.0;
因为您的cast操作符返回一个新对象:

return new MyClass{ A = value };
您没有更改原始目标对象,而是在目标变量中指定了一个全新的对象。你不能这样做


您希望将一个数字转换为一个MyClass对象,但同时“保留”另一个MyClass对象的值,该对象在转换过程中根本不使用

我知道它正在创建新对象,因此其他值将丢失。问题是我怎么能做到?答案是你不能。无法重写赋值运算符。这是否只是为了便于编写代码而需要的?或者,您是否还有其他问题需要通过这种方式解决?如果你有另一个问题,那么这不是一个潜在的解决方案,你应该寻找另一个解决方案。@FaisalHafeez我正面临着同样的问题。因为你唯一能做的就是实现一个隐式的值转换,它不能为你提供目标对象,这是不可能的。