2013-04-10 173 views
0

我正在製作一個示例程序,供稍後參加C#獨立學習的學生使用。我以爲我明白<T>,但顯然我缺乏一些神奇的祕密,使我可以充分利用它。不能將類型'char'隱式轉換爲類型Test <char>,爲什麼?

當我嘗試做一個變量,它工作正常:

static Test<char> c = new Test<char>('n'); 

正如你可以看到它的實例化和一切。

現在,當我去把它分配給通過Console.Read()不同的值,那麼它給我的錯誤: 無法隱式轉換類型'char''ConsoleApplication1.Test<char>'

我曾經嘗試都:

c = (char)Console.Read(); 

和:

c = Convert.ToChar(Console.Read()); 

甚至:(我知道這樣做是愚蠢的,但我變得很煩,想看看它是否會工作)

c = (char)Convert.ToChar(Console.Read()); 

所以,我徹底困惑如何繼續。請幫助。

編輯: 當前在構造類Test

public Test() { }//empty constructor 

    public Test(T obj) 
    { 
     variable = obj; 
    }//filled constructor 
+3

那麼在第一種情況下,你正在調用構造函數。在其他情況下,你不是。是否有任何理由不使用'c = new Test ((char)Console.Read())'? – 2013-04-10 15:45:38

+0

我不想在這一點上做一個新的變量,所以爲什麼我會再次調用構造函數? – joesumbody122 2013-04-10 15:53:00

+1

因爲您正在嘗試創建一個新的*實例* Test'Test '。我認爲你對變量和構造函數之間的關係感到困惑。 – 2013-04-10 15:58:26

回答

4

Test<char>不是char。它是一個新的泛型類型(Test<T>),它可能(假設)與提供的類型參數對象(即T)有關。在你的例子中,你已經聲明你想使用char類型作爲這個泛型類型的類型參數。

想象一下,你有Test<T>T類型的屬性:

class Test<T>{ 
    public T MyTypeValue { get; set; } 
} 

然後,您可以創建這個泛型類型的新實例,並指定屬性的你試圖讓事物的實例(在這種情況下,控制檯讀取):

static Test<char> c = new Test<char>(){ MyTypeValue = 'n'}; 

由於MyTypeValue由通用型的T類型參數的方法是char類型,你可以指定一個實際char它,但只是不到c。也就是說,沒有實施一些其他的轉換方法,就像奧斯汀所暗示的那樣。

+0

我創建的變量作爲全球所以我相信它會靜態測試 c = new Test {c.MyTypeValue ='n'};' – joesumbody122 2013-04-10 16:51:34

+0

構造函數之後的{}'語法是[object initializer]的一個示例(http://msdn.microsoft.com /en-us/library/vstudio/bb384062.aspx)。您不包括您正在修改的實例名稱。它被認爲是新的實例。 (另外,我編輯了我的迴應:構造函數調用丟失了parens。) – Peter 2013-04-10 20:14:04

+0

語法不是我添加的,格式化程序必須在發佈時進行更改。我實際上將它們作爲括號。 – joesumbody122 2013-04-11 15:09:41

相關問題