[英]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.