Допустим, что тебе надо отсортировать массив строк в соответствии с каким-то очень специальным правилом сравнения.  В .NET 1.x правило надо записать в виде метода некоторого класса, дать ему имя, и только после этого использовать.  Метод надо создавать, даже если он используется только в одном месте.
  private int specialStringCompare(string s1, string s2) { /* как-то сравнить строки */ }
  public void f(string[] strings)
  {
    // бла-бла
    sort(strings, new CompareDelegate(specialStringCompare));
    // бла-бла
  }
Некоторые люди считают, что одноразовые функции надо описывать непостредственно в точке использования.  Обоснования могут быть самые разные, например, чтобы не замусоривать объявление класса лишними сущностями.
Используя анонимные методы, можно уменьшить число объявлений в классе:
  
  public void f(string[] strings)
  {
    // бла-бла
    sort(strings, delegate int (string s1, string s2) {  /* как-то сравнить строки */ } );
    // бла-бла
  }
Это может быть удобным для быстрой разработки, когда надо быстренько склепать код.