我有以下代碼:
#nullable enable
using System;
public class X {
}
public class Program
{
public static void Main()
{
var y = new object();
if (y is not X notX){
notX = null; // nullable warning generated here because notX is not nullable
}
}
}
似乎雖然我可以分配null給我,但我無法以notX這種方式宣告它。
if (y is not X? notX)
只產生編譯錯誤。
有沒有辦法做到這一點?
試試看:https ://dotnetfiddle.net/JoAeKL
uj5u.com熱心網友回復:
沒有必要notX = null。根據定義,如果 y 不是 X 型別,它只會進入 if 陳述句。然后宣告模式總是將 null 分配給 notX。
notX = null創建警告,因為您將 null 分配給不可為空的型別。
該陳述句實際上沒有意義,因為如果執行該陳述句, notX 將始終為空。唯一的優點是創建了一個值為“null”的變數 notX,但這樣寫以下內容也會更簡潔:
var y = new X();
if (y is not X)
{
X? notX = null;
}
uj5u.com熱心網友回復:
如果您嘗試將模式匹配與不帶變數的可空型別一起使用:
if (y is not X?){
}
然后,您將看到禁止您在此模式中使用可為空型別的確切錯誤,即:It is not legal to use nullable type X? in a pattern; use the underlying type 'X' instead.
如果您嘗試使用任何其他可為空的型別,也會發生同樣的情況。
這解釋了為什么在嘗試使用它時會出現編譯錯誤,以及為什么在第一個示例中Converting null literal or possible null value to non-nullable type嘗試將 null 分配給會收到警告。notX僅僅是因為,當您在這里使用宣告模式時,總是需要一個不可為空的物件。
如果您確實需要 X 型別的可為空物件,那么要做的事情之一是:
X? notX; //or declare it locally inside the if block
if (y is not X)
{
notX = null;
}
uj5u.com熱心網友回復:
為什么這有什么問題?
if (y is not X)
{
y = null;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437691.html
