using System;
using System.Collections;
using System.Collections.Generic;
public class Test
{
public static void Main(string[] args)
{
foreach (var i in new DangerousEnumerable())
{
Console.WriteLine(i);
break; // consumer decides to abort
}
}
}
public class Resource : IDisposable
{
public Resource()
{
Console.WriteLine("Resource acquired!");
}
public void Dispose()
{
Console.WriteLine("Resource disposed!");
}
}
public class DangerousEnumerable : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
using (new Resource())
{
yield return 1;
yield return 2;
}
Console.WriteLine("Finished!");
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKCXsKCQlmb3JlYWNoICh2YXIgaSBpbiBuZXcgRGFuZ2Vyb3VzRW51bWVyYWJsZSgpKQoJCXsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoaSk7CgkJCWJyZWFrOyAgLy8gY29uc3VtZXIgZGVjaWRlcyB0byBhYm9ydAoJCX0KCX0KfQoKcHVibGljIGNsYXNzIFJlc291cmNlIDogSURpc3Bvc2FibGUKeyAKCXB1YmxpYyBSZXNvdXJjZSgpIAoJewoJCUNvbnNvbGUuV3JpdGVMaW5lKCJSZXNvdXJjZSBhY3F1aXJlZCEiKTsKCX0KCglwdWJsaWMgdm9pZCBEaXNwb3NlKCkKCXsKCQlDb25zb2xlLldyaXRlTGluZSgiUmVzb3VyY2UgZGlzcG9zZWQhIik7Cgl9Cn0KCnB1YmxpYyBjbGFzcyBEYW5nZXJvdXNFbnVtZXJhYmxlIDogSUVudW1lcmFibGU8aW50Pgp7CglwdWJsaWMgSUVudW1lcmF0b3I8aW50PiBHZXRFbnVtZXJhdG9yKCkKCXsKCQl1c2luZyAobmV3IFJlc291cmNlKCkpIAoJCXsKCQkJeWllbGQgcmV0dXJuIDE7CgkJCXlpZWxkIHJldHVybiAyOwoJCX0KCQlDb25zb2xlLldyaXRlTGluZSgiRmluaXNoZWQhIik7Cgl9CgoJSUVudW1lcmF0b3IgSUVudW1lcmFibGUuR2V0RW51bWVyYXRvcigpCgl7CgkJcmV0dXJuIEdldEVudW1lcmF0b3IoKTsKCX0KfQ==