2012-01-21 81 views
10

請讓我知道爲什麼ParameterizedThreadStart類只允許只有System.object參數類型包含的方法。ParameterizedThreadStart爲什麼只允許對象參數?

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

爲什麼我想知道這是我不想再使用類型轉換語法。

string Parameter = (string)outValue; 

回答

15

的原因限制是ThreadStart不是一個普通的委託,因此它只能傳遞一個object周圍。這很容易解決,但通過使用lambda直接傳遞值。

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

    ... 
} 

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

爲C#2.0

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

    ... 
} 
+0

我想,誰使用.NET Framework 2.0的開發者版本,拉姆達是很難使用。我對麼 ? –

+0

@Frank我剛剛更新了我的答案,包括一個可以與2.0 C#編譯器一起使用的版本。注意:即使在使用C#3.0或更高版本的編譯器的2.0框架中,使用lambda語法也是有效的。無論哪種方式,我放在那裏的第二個示例將適用於C#2.0以上的所有內容 – JaredPar

+0

我真的很感興趣的是您說我們可以在2.0框架中使用lambda語法。那麼,請你告訴我,我們該怎麼做。任何參考鏈接? –

相關問題