【发布时间】:2021-07-22 17:06:12
【问题描述】:
我不太明白以下可为空的警告。
如您所见,我有一部分表达式,其中sheet 不为空,但sheet.Id 可能为空。但是为什么我用sheet.Id.HasValue查不到呢?
我也尝试过sheet.Id != null,但这给了我一个不同的警告。
警告 CS8625 无法将 null 文字转换为不可为 null 的引用类型。
如何安全地确定sheet.Id 是否不为空?
更新
这个版本实际上是在没有警告的情况下编译的。但我还是不明白为什么其他版本给我警告。
public Worksheet? GetFirstWorksheet()
{
WorkbookPart? workbookPart = Document.WorkbookPart;
Workbook? workbook = workbookPart?.Workbook;
if (workbook != null)
{
Sheets? sheets = workbook.GetFirstChild<Sheets>();
Sheet? sheet = sheets?.Elements<Sheet>()
.FirstOrDefault();
if (sheet != null && sheet.Id?.Value != null)
return ((WorksheetPart)workbookPart!.GetPartById(sheet.Id!)).Worksheet;
}
return null;
}
【问题讨论】:
-
您可以尝试使用空条件
if(sheet?.Id != null) -
其次,所有可为空的对象是什么?
-
@Nkosi:这也给了我警告 CS8604 和 CS8625。
-
@Nkosi:你什么意思?
Sheet是 OpenXml 的一部分。该库的开发人员决定什么可以为空。我只是想处理它。您应该尝试使用 OpenXml 和可空值进行复杂开发。有趣的东西! -
嗯,这真的很奇怪。如果你这样做会发生什么
if (sheet?.Id.HasValue == true)
标签: c# .net-core openxml nullable