Por que obtenho o erro "O tipo 'string' deve ser um tipo de valor não anulável para usá-lo como parâmetro 'T' no tipo ou método genérico '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
já é anulável.Respostas:
Use em
string
vez destring?
em todos os lugares do seu código.O
Nullable<T>
tipo requer que T seja um tipo de valor não anulável, por exemploint
ouDateTime
. Tipos de referência comostring
já podem ser nulos. Não haveria sentido em permitir coisasNullable<string>
assim, pois não é permitido.Além disso, se você estiver usando o C # 3.0 ou posterior, poderá simplificar seu código usando propriedades implementadas automaticamente :
fonte
string
é um tipo de referência, uma classe. Você pode usar apenasNullable<T>
oT?
açúcar sintático C # com tipos de valor não anuláveis , comoint
eGuid
.Em particular, como
string
é um tipo de referência, uma expressão do tipostring
já pode ser nula:fonte
System.String
(com S maiúsculo) já é anulável, não é necessário declará-lo como tal.(string? myStr)
está errado.fonte
Por uma razão muito específica, digite
Nullable<int>
seu cursor em Nullable e pressione F12 - Os metadados fornecem a razão (observe a restrição de estrutura):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
fonte
Nullable<Nullable<int>>
não é permitido, emboraNullable<int>
seja uma estrutura.Observe que na próxima versão do C #, que é 8, as respostas não são verdadeiras.
All the reference types are non-nullable by default
e você pode realmente fazer o seguinte:Contudo,
O importante aqui é mostrar a intenção do seu código. Se a "intenção" é que o tipo de referência possa ser nulo, marque-o, caso contrário, a atribuição de valor nulo a não nulo resultaria em aviso do compilador.
Mais informações
fonte