如何将另一个结构隐式转换为我的Type?

因为它是MyClass x = 120; ,是否可以创建这样的自定义类? 如果是这样,我该怎么办?

使用隐式运算符通常被认为是一个坏主意,因为它们毕竟是隐含的并且在您的背后运行。 调试代码乱丢运算符重载是一场噩梦。 那说,有这样的事情:

 public class Complex { public int Real { get; set; } public int Imaginary { get; set; } public static implicit operator Complex(int value) { Complex x = new Complex(); x.Real = value; return x; } } 

你可以使用:

 Complex complex = 10; 

或者你可能会超载+运算符

 public static Complex operator +(Complex cmp, int value) { Complex x = new Complex(); x.Real = cmp.Real + value; x.Imaginary = cmp.Imaginary; return x; } 

并使用代码

 complex +=5; 

不确定这是否是您想要的,但您可以通过实现隐式运算符来实现: http : //msdn.microsoft.com/en-us/library/z5z9kes2(VS.71).aspx

创建一个隐式运算符:

http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx

例如:

 public struct MyStruct // I assume this is what you meant, since you mention struct in your title, but use MyClass in your example. { public MyClass(int i) { val = i; } public int val; // ...other members // User-defined conversion from MyStruct to double public static implicit operator int(MyStruct i) { return i.val; } // User-defined conversion from double to Digit public static implicit operator MyStruct(int i) { return new MyStruct(i); } } 

“这是一个好主意吗?” 值得商榷。 隐式转换往往会破坏程序员的公认标准; 一般不是一个好主意。 但是,如果你正在做一些大型价值库,那么它可能是一个好主意。

是的,这是一个简短的例子……

  public struct MyCustomInteger { private int val; private bool isDef; public bool HasValue { get { return isDef; } } public int Value { return val; } } private MyCustomInteger() { } private MyCustomInteger(int intVal) { val = intVal; isDef = true; } public static MyCustomInteger Make(int intVal) { return new MyCustomInteger(intVal); } public static NullInt = new MyCustomInteger(); public static explicit operator int (MyCustomInteger val) { if (!HasValue) throw new ArgumentNullEception(); return Value; } public static implicit operator MyCustomInteger (int val) { return new MyCustomInteger(val); } }