2012-01-21 18 views
10

Per favore fatemi sapere perché la classe ParameterizedThreadStart ammette solo il metodo che contiene solo il tipo di argomento System.object.Perché ParameterizedThreadStart consente solo il parametro dell'oggetto?

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); 
    } 
} 

Perché mi piacerebbe sapere che non voglio più usare la sintassi del tipo cast.

string Parameter = (string)outValue; 

risposta

15

La ragione per la limitazione è che ThreadStart non è un delegato generico e, quindi, è solo in grado di passare un object intorno. Questo è abbastanza facile da aggirare usando però una lambda in cui si passa direttamente il valore.

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

    ... 
} 

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

versione per C# 2,0

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

    ... 
} 
+0

Credo che, come per gli sviluppatori che utilizzano .NET Framework 2.0, lambda è difficile da usare. Ho ragione ? –

+0

@Frank Ho appena aggiornato la mia risposta per includere una versione che funzionerà con il compilatore 2.0 C#. Nota: l'uso della sintassi lambda è valido anche nel framework 2.0 purché si usi il compilatore C# 3.0 o superiore. Ad ogni modo, il secondo campione che ho messo lì funzionerà con tutto C# 2.0 e sopra – JaredPar

+0

Mi interessa davvero il modo in cui hai detto che potremmo usare la sintassi lambda nel framework 2.0. Quindi, potresti dirmi come potremmo farlo. Qualche link di riferimento? –

Problemi correlati