{ Contract.Invariant(st!= null, "Инвариант: Отсутствуетобъект Stack");
}
public void Test()
{stringstr = "";
str = "1-ястрока"; st.Push(str);
str = "2-ястрока"; st.Push(str);
str = "3-ястрока"; st.Push(str);
while (st.Count>0) st.Pop1();
st.Pop3();
st.Pop2();
st.Pop1();
}
static public void Main(string[] args)
{Program p = new Program();
p.Test();
}
} //конецклассаProgram
} //конецпространства имен
Результат выполнения
Исправляемошибку, т.е. создаемобъект
Stack<string>st = new Stack<string>();
Результат выполнения в этом случае
Последовательно вызваны методы Pop3(), Pop2(), Pop1(), в каждом из которых сгенерировано исключение типа ContractException со своим описанием ошибки. При этом метод Pop1() пытается выполнить вызов
list.RemoveAt(list.Count - 1);
Именно этот вызов генерирует не только исключение ContractException, но и исключение Exception, которое прерывает программу. Если вызвать методы в порядке
Pop1();
Pop2();
Pop3();
то прогрмма будет прерываться на методе Pop1(), и обращения к Pop2(), Pop3() уже не будет.
https://xakep.ru/2010/12/13/54283/
безопасность С# приложений