Почему параметр ParameterizedThreadStart разрешает только параметр объекта?

Пожалуйста, дайте мне знать, почему класс ParameterizedThreadStart разрешает только метод, который содержит только тип аргумента System.object.

public class MainThreadTest
{
    public static void Main(string[] args)
    {
        Thread T = new Thread(new ParameterizedThreadStart(DisplayYOrX));
        T.Start("X");

        DisplayYOrX("Y");
    }

    static void DisplayYOrX(object outValue)
    {
        string Parameter = (string)outValue;

        for(int i=0; i<10; i++)
            Console.Write(Parameter);
    }
}

Почему я хотел бы знать об этом, я не хочу снова использовать синтаксис типа cast.

string Parameter = (string)outValue;

Ответ 1

Причиной ограничения является то, что ThreadStart не является общим делегатом и, следовательно, он способен передавать object. Это достаточно просто, чтобы работать, но используя лямбда, где вы прямо передаете значение.

public static void Main(string[] args) {
  ThreadStart start = () => { 
    DisplayYOrX("X");
  };
  Thread t = new Thread(start);
  t.Start();

  ...
}

static void DisplayYOrX(string outValue) {
  ...
}

Версия для С# 2.0

public static void Main(string[] args) {
  ThreadStart start = delegate { 
    DisplayYOrX("X");
  };
  Thread t = new Thread(start);
  t.Start();

  ...
}