簡體   English   中英

反序列化給出警告將 null 文字或可能的 null 值轉換為不可為空的類型

[英]Deserialize is giving warning Converting null literal or possible null value to non-nullable type

我在 Visual Studio 2022 中收到以下代碼中行(T)ser.Deserialize(sr)的以下警告。

警告:

將 null 文字或可能的 null 值轉換為不可為空的類型。

代碼:

public T Deserialize<T>(string input) where T : class
{
    System.Xml.Serialization.XmlSerializer ser = new 
      System.Xml.Serialization.XmlSerializer(typeof(T));

    using (StringReader sr = new StringReader(input))
    {
        return (T)ser.Deserialize(sr);
    }
}

有沒有辦法擺脫這個警告?

XmlSerializer.Deserialize返回一個可為空的 object 所以你的方法也應該這樣做。 改變方法返回T? 最后一行要轉換為T? 還:

public T? Deserialize<T>(string input) where T : class
{
    System.Xml.Serialization.XmlSerializer ser = new
      System.Xml.Serialization.XmlSerializer(typeof(T));

    using (StringReader sr = new StringReader(input))
    {
        return (T?)ser.Deserialize(sr);
    }
}

或者,您可以檢查 null,如果返回為 null,則可能拋出異常或執行其他操作:

public T Deserialize<T>(string input) where T : class
{
    System.Xml.Serialization.XmlSerializer ser = new
      System.Xml.Serialization.XmlSerializer(typeof(T));

    using (StringReader sr = new StringReader(input))
    {
        var t = ser.Deserialize(sr);
        if(t == null)
        {
            throw new Exception("It was null, panic!");
        }
        return (T)t;
    }
}

我想你正在使用 .net6/c#10,這是 c#10 中的一個新功能( 你也可以看到這個)。 編譯器總是檢查可能的 null 值。 這就是它給你這些警告的原因。 要簡單地解決這個問題,您可以讓方法返回nullable<T>而不僅僅是T 自 .net5/c#9 以來,還可以使用新的語法糖簡化使用語句和序列化程序聲明

public T? Deserialize<T>(string input) where T : class
{
    System.Xml.Serialization.XmlSerializer ser = new(typeof(T));

    using StringReader sr = new StringReader(input);
    return ser.Deserialize(sr) as T;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM