mirror of https://github.com/icsharpcode/ILSpy.git
11 changed files with 415 additions and 49 deletions
@ -0,0 +1,131 @@
@@ -0,0 +1,131 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Text; |
||||
using System.Threading.Tasks; |
||||
|
||||
namespace ICSharpCode.Decompiler.Tests.TestCases.Correctness |
||||
{ |
||||
class DeconstructionTests |
||||
{ |
||||
public static void Main() |
||||
{ |
||||
new CustomDeconstructionAndConversion().Test(); |
||||
} |
||||
|
||||
private class CustomDeconstructionAndConversion |
||||
{ |
||||
public struct MyInt |
||||
{ |
||||
public static implicit operator int(MyInt x) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
public static implicit operator MyInt(int x) |
||||
{ |
||||
return default(MyInt); |
||||
} |
||||
} |
||||
|
||||
public int IntField; |
||||
|
||||
public int? NullableIntField; |
||||
|
||||
public MyInt MyIntField; |
||||
|
||||
public MyInt? NullableMyIntField; |
||||
private MyInt? nMy; |
||||
private MyInt my; |
||||
|
||||
public int Int { |
||||
get; |
||||
set; |
||||
} |
||||
|
||||
public int? NInt { |
||||
get; |
||||
set; |
||||
} |
||||
|
||||
public MyInt My { |
||||
get { |
||||
Console.WriteLine("get_My"); |
||||
return my; |
||||
} |
||||
set { |
||||
Console.WriteLine("set_My"); |
||||
my = value; |
||||
} |
||||
} |
||||
|
||||
public MyInt? NMy { |
||||
get { |
||||
Console.WriteLine("get_NMy"); |
||||
return nMy; |
||||
} |
||||
set { |
||||
Console.WriteLine("set_NMy"); |
||||
nMy = value; |
||||
} |
||||
} |
||||
|
||||
public static MyInt StaticMy { |
||||
get; |
||||
set; |
||||
} |
||||
|
||||
public static MyInt? StaticNMy { |
||||
get; |
||||
set; |
||||
} |
||||
|
||||
public void Deconstruct(out MyInt? x, out MyInt y) |
||||
{ |
||||
Console.WriteLine("Deconstruct(x, y)"); |
||||
x = null; |
||||
y = default(MyInt); |
||||
} |
||||
|
||||
public CustomDeconstructionAndConversion GetValue() |
||||
{ |
||||
Console.WriteLine($"GetValue()"); |
||||
return new CustomDeconstructionAndConversion(); |
||||
} |
||||
|
||||
public CustomDeconstructionAndConversion Get(int i) |
||||
{ |
||||
Console.WriteLine($"Get({i})"); |
||||
return new CustomDeconstructionAndConversion(); |
||||
} |
||||
|
||||
private MyInt? GetNullableMyInt() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void Test() |
||||
{ |
||||
Property_NoDeconstruction_SwappedAssignments(); |
||||
Property_NoDeconstruction_SwappedInits(); |
||||
} |
||||
|
||||
public void Property_NoDeconstruction_SwappedAssignments() |
||||
{ |
||||
Console.WriteLine("Property_NoDeconstruction_SwappedAssignments:"); |
||||
CustomDeconstructionAndConversion customDeconstructionAndConversion = Get(0); |
||||
CustomDeconstructionAndConversion customDeconstructionAndConversion2 = Get(1); |
||||
GetValue().Deconstruct(out MyInt? x, out MyInt y); |
||||
MyInt myInt2 = customDeconstructionAndConversion2.My = y; |
||||
MyInt? myInt4 = customDeconstructionAndConversion.NMy = x; |
||||
} |
||||
|
||||
public void Property_NoDeconstruction_SwappedInits() |
||||
{ |
||||
Console.WriteLine("Property_NoDeconstruction_SwappedInits:"); |
||||
CustomDeconstructionAndConversion customDeconstructionAndConversion = Get(1); |
||||
(Get(0).NMy, customDeconstructionAndConversion.My) = GetValue(); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue