2012-02-10 57 views
132

爲什麼我收到錯誤「類型‘字符串’必須是一個非爲了在通用類型或方法'System.Nullable'中使用它作爲參數'T',可以使用空值類型?類型「字符串」必須是非可空類型,才能在泛型類型或方法來使用它作爲參數T「System.Nullable <T>」

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using Universe; 

namespace Universe 
{ 
    public class clsdictionary 
    { 
     private string? m_Word = ""; 
     private string? m_Meaning = ""; 

     string? Word { 
      get { return m_Word; } 
      set { m_Word = value; } 
     } 

     string? Meaning { 
      get { return m_Meaning; } 
      set { m_Meaning = value; } 
     } 
    } 
} 
+15

'String'已經是空。 – 2012-02-10 23:52:31

+19

這個問題沒有理由應該收到-1。除了可能成爲一個副本。 – 2012-02-11 00:07:39

回答

164

使用string而不是string?在代碼中的所有地方。

Nullable<T>類型要求T是非空值類型,例如intDateTime。引用類型如string已經可以爲空。允許諸如Nullable<string>這樣的東西是沒有意義的,因此它是不允許的。

此外,如果你使用的是C#3.0或更高版本可以使用auto-implemented properties簡化代碼:

public class WordAndMeaning 
{ 
    public string Word { get; set; } 
    public string Meaning { get; set; } 
} 
+1

M.Babcock,當我做m_Word = null,則它的錯誤,有什麼建議?我希望能夠將Word設置爲空。 – MiscellaneousUser 2012-02-11 00:10:32

+1

@MiscellaneousUser:你會得到什麼錯誤信息?你能發佈你試圖編譯的確切文件嗎?很難從僅看到一行代碼中猜出您的錯誤。我的意思是這可能是因爲你缺少一個分號...但也許你只是忘記複製+粘貼......這只不過是猜測,直到你發佈你試圖編譯代碼。 – 2012-02-11 00:12:03

+0

感謝您的幫助,看到這個帖子http://stackoverflow.com/questions/187406/c-sharp-nullable-string-error並且可以看到問號僅僅是值類型。 – MiscellaneousUser 2012-02-11 00:22:13

46

string是引用類型,一類。您只能使用Nullable<T>T? C#語法糖,其中不可空值類型,如intGuid

特別是,作爲string是引用類型,既可以是空string類型的表達式:

string lookMaNoText = null; 
3

對於一個非常特殊的原因類型Nullable<int>把你的光標放在可空,打F12 - 元數據提供理由(請注意結構約束):

public struct Nullable<T> where T : struct 
{ 
... 
} 

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+4

雖然'Nullable '是一個結構體,但不允許使用'Nullable >'。 – 2012-02-11 00:08:30

+0

這很有趣。這是「硬編碼」到編譯器中嗎?它如何受限於特定的結構(可空(Nullable >)? - 編輯我現在看到它顯然是特殊的 - 編譯錯誤...必須是非空值類型.... – 2012-02-11 00:20:39

11

SYST em.String已經是空的:你不需要聲明它(字符串? myStr)是錯誤的。

相關問題