Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace ConsoleAppSandbox
- {
- static class Program
- {
- private static void Display<T>(System.Collections.Generic.IEnumerable<T> values)
- {
- using (var e = values.GetEnumerator())
- {
- int counter = 11;
- while (true)
- {
- if (false == e.MoveNext())
- {
- break;
- }
- System.Console.Write(e.Current?.ToString());
- counter -= 1;
- if (0 == counter)
- {
- break;
- }
- }
- }
- }
- sealed class Detector
- {
- internal int Counter { get; private set; }
- internal int Overflow { get; private set; }
- public System.Collections.Generic.IEnumerable<double> Do()
- {
- try
- {
- for (int i = 0; i < 10; i++)
- {
- yield return 0;
- }
- ++Overflow;
- yield return 0;
- }
- finally
- {
- Counter += 1;
- }
- }
- }
- public static void Main(string[] args)
- {
- Display(args);
- System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null));
- try
- {
- Display(new string[] {null, null});
- }
- catch (System.Exception)
- {
- throw new System.Exception("В C#, пока, нет способов на этапе компиляции гарантировать, что последовательность не будет содержать нулевые ссылки. Надо бы их корректно обрабатывать.");
- }
- Detector foo = new Detector();
- Display(foo.Do());
- if (foo.Counter != 1)
- {
- throw new System.Exception("IEnumerator может реализовывать интерфейс IDisposable!");
- }
- if (foo.Overflow != 0)
- {
- throw new System.Exception("Код не должен перебирать более 10 элементов последовательности.");
- }
- }
- static void Main1()
- {
- const string fileName = "tmp.tmp";
- byte[] dataToWrite = new byte[] { 0, 1, 0, 1 };
- System.IO.FileStream file = new System.IO.FileStream(fileName, System.IO.FileMode.Create);
- file.Write(dataToWrite, 0, dataToWrite.Length);
- System.GC.Collect();
- System.GC.WaitForPendingFinalizers();
- System.IO.File.Delete(fileName);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement