【发布时间】:2020-05-17 10:00:15
【问题描述】:
我为我的测试项目启用了可空性上下文并尝试修复所有可空性警告。除了以下我不理解的问题(return ref book; 行)之外,我能够修复所有问题。我在编译器生成的这一行的注释中粘贴了警告:
class Program
{
private Book[] books = { new Book("Call of the Wild, The", "Jack London"),
new Book("Tale of Two Cities, A", "Charles Dickens") };
private Book? nobook = null;
public ref Book? GetBookByTitle(string title)
{
for (int ctr = 0; ctr < books.Length; ctr++)
{
ref Book book = ref books[ctr];
if (title == book.Title)
return ref book; //CS8619: Nullability of reference types in value of type 'Book' doesn't match target type 'Book?'.
}
return ref nobook;
}
}
public class Book
{
public readonly string Title;
public readonly string Author;
public Book(string title, string author)
{
Title = title;
Author = author;
}
}
我不明白为什么编译器不满意在方法中返回为可空ref Book? 的不可空变量ref Book book
据我所知,我们可以将不可空变量分配给可空变量,如下所示。正如下面的代码所示,如果我在 Book? 类型的方法中返回非引用 Book book 变量,编译器不会发现任何问题:
public Book? GetBookCopyByTitle(string title)
{
for (int ctr = 0; ctr < books.Length; ctr++)
{
ref Book book = ref books[ctr];
if (title == book.Title)
return book; //no warning here. The compiler is satisfied if we don't use ref return value
}
return null;
}
为什么编译器会在第一个代码中产生 sn -p 这个错误:
Nullability of reference types in value of type 'Book' doesn't match target type 'Book?'.
【问题讨论】:
标签: c# c#-8.0 nullable-reference-types nullability