1 // Bug #62322. 2 using System; 3 4 public struct integer 5 { 6 private readonly int value; 7 integerinteger8 public integer (int value) 9 { 10 this.value = value; 11 } 12 operator integerinteger13 public static implicit operator integer (int i) 14 { 15 return new integer (i); 16 } 17 operator doubleinteger18 public static implicit operator double (integer i) 19 { 20 return Convert.ToDouble (i.value); 21 } 22 operator +integer23 public static integer operator + (integer x, integer y) 24 { 25 return new integer (x.value + y.value); 26 } 27 } 28 29 class X 30 { Add(integer x, object other)31 public static object Add (integer x, object other) 32 { 33 if (other is int) return x + ((int) other); 34 if (other is double) return x + ((double) other); 35 throw new InvalidOperationException (); 36 } 37 Main()38 public static int Main () 39 { 40 integer i = new integer (3); 41 double d = 4.0; 42 43 object result = Add (i, d); 44 if (!(result is double)) 45 return 1; 46 47 if ((double) result != 7.0) 48 return 2; 49 50 return 0; 51 } 52 } 53