gpt4 book ai didi

c# - 为什么强制转换为 (int?) 有效而 (string?) 在 LINQ 查询中不起作用

转载 作者:行者123 更新时间:2023-11-30 18:55:51 25 4
gpt4 key购买 nike

我正在编写一个简单的 LINQ to XML 查询。通常,XML 文档中的某些节点可能缺少某些元素。为了解决这个问题,我尝试使用 Scott Guthrie 提出的可空类型和合并运算符。我注意到什么效果是将元素转换为 (string?) dit 在转换为 (int?) 时不起作用。一个例子:

var modules = from module in XMLConfig.Descendants("module")
select new MyApp.Modules.Manager
{
ManagerUrl = (string?)module.Element("Manager") ?? "http://localhost/default.asmx",
ManagerType = (int?) module.Element("ManagerType") ?? 1,
ManagerNumber = (int?) module.Element("ManagerNumber") ?? 1,
PrinterNr = (int?) module.Element("PrinterNr") ?? 1,
TextNr = (int?) module.Element("TextNr") ?? 100,
Name = module.Element("Name").Value
};

这给了我编译器错误:

Cannot convert type 'string?' to 'string'

但是,在转换为 (int?) 时没有任何提示。如果有人能解释这种行为的原因 (?),我将不胜感激。

最佳答案

字符串是引用类型,即它已经是“可空的”。对于不能为 null 的值类型,不需要将其包装在 Nullable 中。

这个有效:

ManagerUrl = (string)module.Element("Manager") ?? "http://localhost/default.asmx"
  • (string)module.Element("Manager") 如果 Manager 元素不存在则返回 null,否则返回元素的内容。

  • 如果 ManagerType 元素不存在,
  • (int)module.Element("ManagerType") 将抛出异常,因为 int 不能为 null (值类型)。

  • 如果缺少 ManagerType 元素,
  • (int?)module.Element("ManagerType") 不会抛出异常,因为 int? 可以是null(可空类型)。

关于c# - 为什么强制转换为 (int?) 有效而 (string?) 在 LINQ 查询中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com