2012-11-02 21 views
0

我有我的泛型類和接受作爲參數委託兩種方式(普通或不)通用 - 編譯器警告CS0693或錯誤

public sealed class MyClass<TResult> 
{ 
    public MyClass ContinueWith(ThreadInfo.Parameterized arg) 
    { 
    } 

    public MyClass<TResult> ContinueWith<TResult>(ThreadInfo<TResult>.Parameterized arg) 
    { 
    } 
} 

其中:

public sealed class MyClass 
{ 
} 

我有Compiler Warning (level3) CS0693但如果我從第二種方法中刪除<TResult>

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg) 

我不能使用這個方法,如果我嘗試我得到一個編譯器錯誤,因爲編譯器認爲我想使用第一種方法。

我該如何解決這個問題?

回答

3

那麼它聽起來像你真的

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg) 

換句話說,使用在級別聲明的TResult參數。

如果你真的希望它是一個通用的方法(即引入新的類型參數),你必須給它一個不同的名稱:

public MyClass<T2> ContinueWith<T2>(ThreadInfo<T2>.Parameterized arg) 

(這是可能的,你可能要回報MyClass<TResult>這裏,或類似的東西 - 我們並不知道你想要達到什麼目的,這使得很難提供詳細的幫助。)

+0

最後的作品。謝謝。 – Nick

0

你必須使用不同的參數名稱。所以這取決於你想達到什麼。

我認爲你需要像這樣,在返回類型爲MyClass<TResult>類型的,你可以選擇的類型ThreadInfo<>

public MyClass<TResult> ContinueWith<T1>(ThreadInfo<T1>.Parameterized arg) 
{ 
    //... 
} 

或者,如果你想只選擇類型,當你創建一個實例您的對象:

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg) 
{ 
    //... 
}