?,??, ?. ,?[] cuatro operadores de signos de interrogación en C#

? operador anulable

Un solo signo de interrogación significa 可空运算符que algunos tipos que no aceptan valores NULL pueden verse obligados a adjuntar un
tipo de referencia NULL. Una referencia NULL se puede usar para representar un valor que no existe.
Los tipos de valor generalmente no se pueden representar como vacíos.
Por ejemplo:

   string str=null; // 正确的,
   int i=null; // 错误的,编译器就会报语法错误。

Para hacer que un tipo de valor también admita valores NULL, utilice un tipo que admita valores NULL. Es decir, se puede representar mediante el modificador de tipo anulable "?", y la forma de expresión es "T?"
Por ejemplo: int? representa un entero anulable y DateTime? representa una hora anulable.
T? es en realidad una abreviatura de System.Nullable (estructura genérica), lo que significa que cuando usa T? Cuando el compilador compila, pondrá T? Compilado en forma de System.Nullable.
Por ejemplo: int?, compilado en forma de System.Nullable.

int? i = null ; //正确的,此时不会再有语法错误

Operador coalescente nulo

用于定义可空类型和引用类型的默认值,如果左操作数为null则返回右操作数,否者返回左操作数。

solicitud:

int? a=b??c;

Aviso:
El operador coalescente nulo es 右结合运算符, es decir, al operar 从右向左进行组合的. Por ejemplo, la forma de "a??b??c" se calcula como "a??(b??c)".


?.Operador de detección nula (operador de juicio nulo)

Puede ir seguido de parámetros o expresiones, y las operaciones posteriores solo se pueden realizar cuando no es nulo.

Por ejemplo:

GameObejct?.GetComponent<Rigidbody>();

Si el GameObject es nulo, devuelve un nulo directamente sin realizar operaciones posteriores.
Si GameObject no está vacío, obtenga el componente Rigidbody.

Porque el método de GetComponent puede informar un error, pero si GameObject es nulo, no es necesario que continúe ejecutándose.
El efecto es equivalente a:

if(GameObejct != null)
	GameObejct.GetComponent<Rigidbody>();

?[] Operador de verificación de matriz nula

int[] num = null;
var temp = num?[1];
// temp = null

Puede detectar automáticamente la detección NULL, pero preste atención al problema de la matriz fuera de los límites cuando lo use.

int[] num = {
    
     3, 6, 92, 8 };
var temp = num1 ?[1];
// temp = 6

Supongo que te gusta

Origin blog.csdn.net/blastospore/article/details/130894585
Recomendado
Clasificación