a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
60 lines
843 B
C#
60 lines
843 B
C#
//
|
|
// Test that the foreach statement generated by mcs invokes the Dispose()
|
|
// method even if the enumerator class returned by GetEnumerator () does not
|
|
// implement IDisposable.
|
|
//
|
|
|
|
using System;
|
|
|
|
public class Enumerator {
|
|
|
|
int counter;
|
|
|
|
public Enumerator () {
|
|
counter = 3;
|
|
}
|
|
|
|
public bool MoveNext () {
|
|
return (counter -- > 0);
|
|
}
|
|
|
|
public char Current {
|
|
get {
|
|
return 'a';
|
|
}
|
|
}
|
|
}
|
|
|
|
class RealEnumerator : Enumerator, IDisposable {
|
|
|
|
Coll c;
|
|
|
|
public RealEnumerator (Coll c) {
|
|
this.c = c;
|
|
}
|
|
|
|
public void Dispose () {
|
|
c.disposed = true;
|
|
}
|
|
}
|
|
|
|
public class Coll {
|
|
|
|
public bool disposed;
|
|
|
|
public Enumerator GetEnumerator () {
|
|
return new RealEnumerator (this);
|
|
}
|
|
}
|
|
|
|
class Test {
|
|
|
|
public static int Main(String[] args)
|
|
{
|
|
Coll coll = new Coll ();
|
|
foreach (char c in coll) {
|
|
}
|
|
return (coll.disposed ? 0 : 1);
|
|
}
|
|
}
|