using System;
class Program
{
private interface ISomeType
{
}
private class SomeType : ISomeType
{
}
private static void DoWorkingSwap< TItem> ( TItem[ ] array)
{
var temp = array[ 0 ] ;
array[ 0 ] = array[ 1 ] ;
array[ 1 ] = temp;
}
private static void Swap< TItem> ( ref TItem firstItem, ref TItem secondItem)
{
var temp = firstItem;
firstItem = secondItem;
secondItem = temp;
}
private static void DoFaultySwap< TItem> ( TItem[ ] array)
{
Swap( ref array[ 0 ] , ref array[ 1 ] ) ;
}
private static void Main( string[ ] args)
{
// ВАЖНО: обратите внимание на тип переменной под массив и тип самого массива
ISomeType[ ] array = new SomeType[ 2 ]
{
new SomeType( ) ,
new SomeType( )
} ;
Console.Write ( "Doing working swap... " ) ;
try
{
DoWorkingSwap( array) ;
Console.WriteLine ( "succeeded." ) ;
}
catch ( Exception ex)
{
Console.WriteLine ( "FAILED: {0}" , ex) ;
}
Console.Write ( "Doing faulty swap... " ) ;
try
{
DoFaultySwap( array) ;
Console.WriteLine ( "succeeded." ) ;
}
catch ( Exception ex)
{
Console.WriteLine ( "FAILED: {0}" , ex) ;
}
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgUHJvZ3JhbQp7Cglwcml2YXRlIGludGVyZmFjZSBJU29tZVR5cGUKCXsKCX0KCglwcml2YXRlIGNsYXNzIFNvbWVUeXBlIDogSVNvbWVUeXBlCgl7Cgl9CgoKCXByaXZhdGUgc3RhdGljIHZvaWQgRG9Xb3JraW5nU3dhcDxUSXRlbT4oVEl0ZW1bXSBhcnJheSkKCXsKCQl2YXIgdGVtcCA9IGFycmF5WzBdOwoJCWFycmF5WzBdID0gYXJyYXlbMV07CgkJYXJyYXlbMV0gPSB0ZW1wOwoJfQoKCglwcml2YXRlIHN0YXRpYyB2b2lkIFN3YXA8VEl0ZW0+KHJlZiBUSXRlbSBmaXJzdEl0ZW0sIHJlZiBUSXRlbSBzZWNvbmRJdGVtKQoJewoJCXZhciB0ZW1wID0gZmlyc3RJdGVtOwoJCWZpcnN0SXRlbSA9IHNlY29uZEl0ZW07CgkJc2Vjb25kSXRlbSA9IHRlbXA7Cgl9CgoJcHJpdmF0ZSBzdGF0aWMgdm9pZCBEb0ZhdWx0eVN3YXA8VEl0ZW0+KFRJdGVtW10gYXJyYXkpCgl7CgkJU3dhcChyZWYgYXJyYXlbMF0sIHJlZiBhcnJheVsxXSk7Cgl9CgoKCXByaXZhdGUgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQoJewoJCS8vINCS0JDQltCd0J46INC+0LHRgNCw0YLQuNGC0LUg0LLQvdC40LzQsNC90LjQtSDQvdCwINGC0LjQvyDQv9C10YDQtdC80LXQvdC90L7QuSDQv9C+0LQg0LzQsNGB0YHQuNCyINC4INGC0LjQvyDRgdCw0LzQvtCz0L4g0LzQsNGB0YHQuNCy0LAKCQlJU29tZVR5cGVbXSBhcnJheSA9IG5ldyBTb21lVHlwZVsyXSAKCQl7CgkJCW5ldyBTb21lVHlwZSgpLAoJCQluZXcgU29tZVR5cGUoKQoJCX07CgoJCUNvbnNvbGUuV3JpdGUoIkRvaW5nIHdvcmtpbmcgc3dhcC4uLiAiKTsKCQl0cnkKCQl7CgkJCURvV29ya2luZ1N3YXAoYXJyYXkpOwoJCQlDb25zb2xlLldyaXRlTGluZSgic3VjY2VlZGVkLiIpOwoJCX0KCQljYXRjaCAoRXhjZXB0aW9uIGV4KQoJCXsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIkZBSUxFRDogezB9IiwgZXgpOwoJCX0KCgkJQ29uc29sZS5Xcml0ZSgiRG9pbmcgZmF1bHR5IHN3YXAuLi4gIik7CgkJdHJ5CgkJewoJCQlEb0ZhdWx0eVN3YXAoYXJyYXkpOwoJCQlDb25zb2xlLldyaXRlTGluZSgic3VjY2VlZGVkLiIpOwoJCX0KCQljYXRjaCAoRXhjZXB0aW9uIGV4KQoJCXsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIkZBSUxFRDogezB9IiwgZXgpOwoJCX0KCX0KfQ==