Dlaczego pojawia się błąd „Typ„ ciąg znaków ”musi być typem wartości niepodlegającym wartości null, aby można go było użyć jako parametru„ T ”w typie ogólnym lub metodzie„ System.Nullable ”?
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; }
}
}
}
String
jest już dopuszczalna wartość null.Odpowiedzi:
Użyj
string
zamiaststring?
we wszystkich miejscach w kodzie.Nullable<T>
Typu wymaga T typu wartość nie pustych, na przykładint
czyDateTime
. Typy odwołań, takie jakstring
mogą już mieć wartość null. Nie byłoby sensu pozwalać na takie rzeczy,Nullable<string>
więc jest to zabronione.Ponadto, jeśli używasz języka C # 3.0 lub nowszego, możesz uprościć kod, używając właściwości implementowanych automatycznie :
źródło
string
jest typem referencyjnym, klasą. Możesz używaćNullable<T>
lubT?
C # składniowego cukru tylko z typami wartości niepodlegającymi wartości null, takimi jakint
iGuid
.W szczególności, podobnie jak
string
typ referencyjny, wyrażenie typustring
może już mieć wartość null:źródło
System.String
(z dużym S) ma już wartość zerową, nie musisz deklarować jej jako takiej.(string? myStr)
jest źle.źródło
Z bardzo konkretnego powodu Type
Nullable<int>
umieść kursor na Nullable i naciśnij F12 - Metadata podaje powód (zwróć uwagę na ograniczenie struct):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
źródło
Nullable<Nullable<int>>
jest to niedozwolone, mimo żeNullable<int>
jest to struktura.Zwróć uwagę, że w nadchodzącej wersji C # 8, odpowiedzi nie są prawdziwe.
All the reference types are non-nullable by default
i faktycznie możesz wykonać następujące czynności:Jednak,
Ważne jest tutaj pokazanie intencji twojego kodu. Jeśli „intencją” jest to, że typ referencyjny może mieć wartość null, zaznacz go, aby w przeciwnym razie przypisanie wartości null do wartości nie dopuszczającej wartości null spowodowałoby ostrzeżenie kompilatora.
Więcej informacji
źródło