web-dev-qa-db-ja.com

型 'string'は、ジェネリック型またはメソッド 'System.Nullable <T>'のパラメーターTとして使用するために、null不可型でなければなりません

エラー「ジェネリック型またはメソッド 'System.Nullable'のパラメーター 'T'として使用するには、型 'string'はnull不可の値型でなければなりません」が表示されるのはなぜですか?

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

コードのすべての場所で、string?の代わりにstringを使用します。

Nullable<T>型では、Tがnullを許可しない値型である必要があります(例:intまたはDateTime)。 stringのような参照型はすでにnullになっている可能性があります。 Nullable<string>のようなものを許可しても意味がないため、許可されません。

また、C#3.0以降を使用している場合は、 自動実装プロパティ を使用してコードを簡素化できます。

public class WordAndMeaning
{
    public string Word { get; set; }
    public string Meaning { get; set; }
}
196
Mark Byers

string は参照型、クラスです。 Nullable<T> または、intGuidなどのnull不可valueタイプのT? C#構文糖のみを使用できます。

特に、stringは参照型であるため、string型の式はすでにnullになっている可能性があります。

string lookMaNoText = null;
51
Jon Skeet

System.Stringはすでにnull可能です。そのような(string?myStr)が間違っていると宣言する必要はありません。

14
Chagbert

非常に特殊な理由で、Nullable<int>と入力して、Nullableにカーソルを合わせてF12を押します-メタデータが理由を提供します(構造体の制約に注意してください):

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

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

4
Joshua Enfield

8であるC#の今後のバージョンでは、答えが正しくないことに注意してください。

All the reference types are non-nullable by defaultそして、あなたは実際に以下を行うことができます:

public string? MyNullableString; 
this.MyNullableString = null; //Valid

しかしながら、

public string MyNonNullableString; 
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning. 

ここで重要なことは、コードの意図を示すことです。「意図」が参照型がnullになる可能性がある場合は、マークします。警告。

詳細

0
ANewGuyInTown