在 foreach 中的 DataRow 上转换 null 文字或可能的 null 警告

2023-12-31

更新了我的 .NET Core 3.1 控制台应用程序以使用 Nullables 功能并具有以下内容foreach loop.

DataTable profiles = DB.ListProfiles();
// CS8600 warning here
//               v
foreach (DataRow r in profiles.Rows)
{
    // processing code here
}


static public DataTable ListProfiles()
{
    DataTable t = new DataTable();
    using (SqlConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "SELECT * FROM [Table]";
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                sda.Fill(t);
        }
    }

    return t;
}

在这个例子中,r有编译器警告。

将 null 文字或可能的 null 值转换为不可为 null 的类型。

我知道需要检查空值等。我的问题是,有谁知道如何使用这个新功能让编译器意识到两者都不是profiles nor profiles.Rows会永远为空吗?这t变量在ListProfiles绝对不能返回任何结果,但这不会使Rows空,会吗?

如果我使用空合并运算符??像这样:profiles.Rows ?? ...警告将会消失,但我无法弄清楚在它真正起作用之后可以做什么。

我也尝试过使用!运算符来自如何抑制可能的空引用警告 https://stackoverflow.com/questions/61384377/how-to-suppress-possible-null-reference-warnings/61388468#61388468但这没有效果。警告仍然存在。虽然这适用于其他类型,但似乎不适用于DataRowCollection.

我尝试过各种放置方式null检查,但只有显式的代码内抑制似乎才有效。


可为空的值为r, not profiles or profiles.Rows,由编译器正确识别。只需将其声明为可为空,然后在循环中处理空检查:

foreach (DataRow? r in profiles.Rows)
{
    if(r == null) 
        continue;
    // ...
}

原因是DataRowCollection(这是类型Rows数据表上的属性)是非泛型可枚举的。这就是使用 .NET 1.0 API 所获得的结果。

编译器将非泛型枚举项视为类型object?, not object(或者更准确地说,IEnumerator.Current is an object?),因为集合中的任何此类项目都可能为 null,并且没有泛型将这些项目限制为不可为 null 值。

由于指定了 a 的类型foreach变量只是为您插入一个转换,最终结果是您需要将变量本身声明为可为空,因为您无法安全地将可为空值转换为不可为空值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 foreach 中的 DataRow 上转换 null 文字或可能的 null 警告 的相关文章

  • “RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我尝试使用基于属性的路由 但是当我尝试以下代码片段来激活基于属性的路由时 我收到以下错误消息 RouteCollection 不包含定义 MapMvcAttributeRoutes 这是我的代码 public class RouteConf
  • ASP Core HttpClientFactory 模式使用客户端证书

    任何人都知道在使用时如何使用客户端证书HttpClientFactory 在我发现的所有示例中 您需要提供HttpMessageHandler in the HttpClient构造函数 使用时不可用HttpClientFactory se
  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • dup2() 和 exec()

    include
  • 使用空函数调用 hana::is_valid 的用途是什么?

    Boost Hana https www boost org doc libs 1 61 0 libs hana doc html index html offers boost hana is valid https www boost
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 函数指针上的未知类型 F TYPE

    include
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • C 中的链表数组:初始化和插入?

    我需要创建一个链表数组 如图所示 这就是我到目前为止所做的 typedef struct Node int data struct Node next Node int main void Node link 5 for int q 0 q
  • 为什么必须通过 this 指针访问模板基类成员?

    如果下面的类不是模板 我可以简单地拥有x in the derived班级 但是 通过下面的代码 我have to use this gt x Why template
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • asp.net mvc GET 请求上的 formcollection 应该为空

    我正在发布一个简单的操作 public void Login FormCollection formCollection 即使查询字符串值很少 formcollection Count is 0 是靠行为吗 FormCollection 使
  • DataGridView 捕获用户行选择

    我在处理选择时遇到问题DataGridView 我的网格视图包含一个金额列 表单上有一个文本框 应显示所选网格视图行的总数 因此 我需要在用户选择 取消选择 gridview 行时捕获事件并相应地计算 添加 减去 金额 我找到了两种方法 使
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • 是否有 Android 测试服务可以用来为我提供来自设备的真实调试信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .Net矩阵[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • jQuery UI Datepicker:对齐下面的标签问题

    http jsfiddle net r7D2x http jsfiddle net r7D2x 我正在尝试在标签上使用 jQuery Datepicker span 而不是输入字段 这是代码 javascript placeholder d
  • 无法使用 Python/opencv 关闭/打开 CameraCapture:设备或资源繁忙

    当我尝试使用 Python 重新打开 opencv Camera Capture 时 我得到 libv4l2 error setting pixformat Device or resource busy HIGHGUI ERROR lib
  • rvm在centos 5.5上安装1.8.7-head错误

    我在 CentOS 5 5 上以 root 身份成功安装了 rvm 然后我尝试安装 ruby 1 8 7 head rvm 安装 1 8 7 head 并收到这样的错误 将 Ruby 从源代码安装到 usr local rvm rubies
  • 未找到 vtkRenderer/ vtkRenderWindow 的覆盖

    我是 vtk 的新手 当我运行一个小示例时 它会生成两个错误 找不到 vtkRenderer 的覆盖 找不到 vtkRenderWindow 的覆盖 我用谷歌搜索了这个问题 但找不到合适的解决方案 当我尝试在没有 CMake 的情况下创建
  • python 只记录到文件

    我有一个运行 python 脚本的 cronjob 我添加了一个logging但由于这是一项日常工作 我每天都会收到有关其功能的电子邮件 这真的很烦人 但我似乎找不到一个设置 这将使其仅记录到日志文件中 usr bin python imp
  • 使用“__dict__”或“vars()”?

    内置功能vars 对我来说看起来更像Pythonic 但我明白了 dict 使用更频繁 Python 文档表明它们是等效的 一位博主声称 dict 比vars http pythondoeswhat blogspot com 2012 01
  • 从 Bash 函数返回布尔值

    我想编写一个 bash 函数来检查文件是否具有某些属性并返回 true 或 false 然后我可以在我的脚本中的 if 中使用它 但我应该返回什么 function myfun return 0 else return 1 fi 然后我像这
  • static_casting 的结果是 constexpr void* 常量表达式吗?

    clang 拒绝 gcc 允许的这段代码 int main static constexpr const void vp nullptr static constexpr const char cp static cast
  • 未捕获异步 javascript 中引发的异常

    基本上 为什么这个异常没有被捕获 var http require http options host www crash boom bang please com port 80 method GET try var req http r
  • 如何使用 Google Cloud Composer 设置 dbt?

    我正在尝试在 Google Cloud Composer 上安装 dbt 但遇到了依赖性问题 我已按照本文的说明进行操作 https blog doit intl com setup dbt with cloud composer ab70
  • Twitter 登录崩溃并出现 TWTRInvalidInitializationException

    当我尝试使用 Twitter 登录时 我的应用程序崩溃并显示错误消息 在应用程序设置中未设置有效的 Twitter Kit URL 方案的情况下尝试登录或点赞推文 请参见https dev twitter com twitterkit io
  • 鼠标悬停时更改 html 中的字体颜色和背景

    我使用一小段内联 HTML 代码来更改鼠标悬停时表格中单元格颜色的背景 我仅在特定的表格单元格上使用此功能 因此并非所有单元格都需要这样做 td 这很好用 但我还想更改字体颜色 因此默认情况下它是带有白色文本的黑色单元格 但是当鼠标悬停时
  • 自升级到 Rails 3.1 以来,form_for 参数数量错误(3 为 2)

    在我将应用程序移植到 Rails 3 1 之前 这个 form for 曾经可以工作 div class form box style padding left 1em div
  • 创建一个名为“file.ext:file.ext”的文件到底有什么作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近开始研究隐写术 并且在网上找到了一个教程 为了将新的文本文件隐藏在另一个文件中 教程提供者使用了类似于以下命令的内容 notepad
  • 静态成员函数的局部变量

    今天我们遇到了一个关于多线程环境中静态成员函数的问题 我们问自己但找不到满意答案的问题是 静态成员函数的局部变量也是静态的吗 header class A static int test implementation int A test
  • pandas dataframe 删除每个数字的第一行

    所以 基本上我有一个数据框 其第一列如下所示 1 2 2 3 3 3 3 4 4 5 如您所见 第一列由随机重复的数字组成 首先 我必须删除所有 然后删除每个数字的第一行 由于 1 只有一行 它应该消失 并且只有 2 的第二行保留 依此类推
  • 什么是 ASP.NET 提供程序?

    ASP NET Provider 中的 Provider 是什么意思 例如当我们谈论AuthorizationRuleProvider connectionStrings providerName 这是一种设计模式 提供商模型 http e
  • 在 foreach 中的 DataRow 上转换 null 文字或可能的 null 警告

    更新了我的 NET Core 3 1 控制台应用程序以使用 Nullables 功能并具有以下内容foreach loop DataTable profiles DB ListProfiles CS8600 warning here v f