在没有“new List”的情况下初始化列表属性会导致 NullReferenceException

2024-04-12

using System;
using System.Collections.Generic;

class Parent
{
   public Child Child { get; set; }
}

class Child
{
   public List<string> Strings { get; set; }
}

static class Program
{
   static void Main() {
      // bad object initialization
      var parent = new Parent() {
         Child = {
            Strings = { "hello", "world" }
         }
      };
   }
}

上面的程序编译得很好,但是在运行时崩溃了未将对象引用设置到对象的实例.

如果您注意到上面的片段,我有省略新的在初始化子属性时。

显然正确的初始化方法是:

      var parent = new Parent() {
         Child = new Child() {
            Strings = new List<string> { "hello", "world" }
         }
      };

我的问题是为什么 C# 编译器在看到第一个构造时不抱怨?

为什么损坏的初始化有效语法?

      var parent = new Parent() {
         Child = {
            Strings = { "hello", "world" }
         }
      };

这不是语法错误,而是您在未实例化的属性上使用了对象初始值设定项。你写的内容可以扩展到

var parent = new Parent();
parent.Child.Strings = new List<string> { "hello", "world" };

这会引发NullReferenceException:您正在尝试分配该属性Strings属性所包含的Child while Child还是null。 使用构造函数来实例化Child首先,解决这个问题。

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

在没有“new List”的情况下初始化列表属性会导致 NullReferenceException 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • startActivityForResult(...) 立即返回 0

    当我打电话时startActivityForResult new Intent getActivity VkAuth class VK ID 在 Samsung 上 在 HTC 和 Nexus 上一切正常 onActivityResult在
  • 在单元/集成测试阶段将属性值注入/覆盖到 Spring Boot 属性文件

    使用 Spring Boot 和测试容器 https www testcontainers org 我需要一种方法来动态地告诉应用程序测试容器正在侦听的端口是什么 我知道在测试期间我可以告诉 Spring 使用不同的属性文件 TestPro
  • 当 UIAlertView 存在时,没有动画的方向会产生奇怪的结果

    我在这里面临一个奇怪的问题 由于某种原因 我在视图控制器中使用方向更改期间禁用动画 UIView setAnimationsEnabled NO 但是 当存在警报视图并且如果我更改方向时 它会给出奇怪的结果 所附的屏幕截图是当我将方向更改为
  • 如何检查ResponseWriter是否已经写入

    使用Golang的net http https golang org pkg net http 包裹 我如何检查是否ResponseWriter已写至 我收到以下错误消息 http 多个response WriteHeader调用 当然 我
  • Minecraft 插件 ScheduleSyncDelayedTask 错误

    我遇到了一个问题 并且在制作 Minecraft 插件和编写一般代码方面还很陌生 我正在尝试制作一个插件 在执行第二个命令之前等待大约 15 秒 但是当我尝试执行 plugin new Runnable 时 我现在的代码出现错误 我做了一些
  • Windows Phone 的捏合和缩放行为

    是否可以在 Windows Phone 8 中创建捏合和缩放到图像控件的行为 我正在尝试在我的应用程序中将捏合和缩放以及旋转应用到图像 在一个论坛中 我发现手势侦听器已被弃用 并且他们不提倡使用手势来实现 那么有人可以为我建议一种替代方法吗
  • 重新安装应用程序后 UILocalNotification 触发

    我的应用程序有一个使用 UILocalNotification 的闹钟功能 并且效果很好 但是 如果用户卸载该应用程序 然后重新安装它 他将立即收到所有 中间 通知 我曾尝试致电 UIApplication sharedApplicatio
  • SwiftUI ProgressView 在列表内时不显示

    在下面的简单示例中 您会发现第一次点击时Toggle Loading the ProgressView按应有的方式显示 但第二次 第三次点击 却没有显示 看来是周围的List造成的 有什么想法以及如何使其发挥作用吗 struct Conte
  • 使用 Java 使用 BouncyCastle 生成 X509Certificate

    这就是我现在生成数字证书的方法 现在我可以生成一个带有私钥密码保护的数字证书 public static void main String args throws Exception Security addProvider new Bou
  • WPF 自定义路由事件 - 如何取消订阅?

    如何从一个自定义路由事件中注销 我有以下代码 非常标准的自定义路由事件 Dispatch the Video Detection Movements public delegate void MovementRoutedEventHandl
  • 使用 r 正则表达式删除第一个数字后的字符串

    如何删除字符串第一个数字之后包含的所有内容 x lt c Hubert 208 apt 1 Mass Av 300 block 3 After 这个问题 https stackoverflow com questions 37666077
  • Cygwin 的 bash 出错后变得极其缓慢

    我意识到还有一些关于为什么 Cygwin 明显很慢的问题 但这个案例似乎很独特 我遇到了一些问题 报告了很多错误 然后重新启动后 从 bash 启动的任何进程都非常慢 老实说 我不知道是什么原因造成的 我检查了taskmgr中的进程优先级
  • C# 广播是UDP消息,监听多个回复

    我正在尝试编写一些执行 UDP 广播的代码 然后侦听来自远程服务器的答复 说明它们存在 它用于识别子网上运行服务器应用程序的计算机 因此基本上会发出 谁在那儿 并听取所有答复 我在 Java 中有这个 工作完美 它将 DatagramPac
  • 导入 CSS 最终出现错误

    最近我进入了这个网站 http thecodeplayer com 并发现了几个非常酷的设计 但在其中一些设计中 在 CSS 部分中有一段用于导入的代码片段 如下所示 import url http fonts googleapis com
  • 发送密钥后 Selenium WebElement 值为空

    我正在运行一些简单的表单测试 其中值是添加的字段 将每个值添加到字段后 input SendKeys value 我想检查该字段中的值是否正确 这听起来可能很不寻常 但该字段可能附加了 ajax 搜索 如果搜索没有返回匹配项 则该字段将为空
  • 如何在使用旧版本 gcc 的系统上动态链接到 libc.so.6、libstdc++.so.6 的本地副本

    我的代码是用 c 2011 编写的 并用 g 4 8 编译的 但是 我的系统管理员不会从 gcc g 4 1 升级计算集群 我收到以下错误 lib64 libc so 6 version GLIBC 2 14 not found requi
  • 如何检测文件名中的常见字符串组

    我正在尝试找出一种检测文件组的方法 例如 如果给定目录有以下文件 生日001 jpg 生日002 jpg 生日003 jpg Picknic1 jpg Picknic2 jpg 下午 jpg 我想将列表压缩为类似的内容 生日 3张 野餐 2
  • 在 Matlab 中按下某个键停止无限 while 循环

    我有一个无限的 while 循环 我想在按下键盘按键时停止它 伪代码 While 1 do stuff listening for key if key is pressed break end end 功能waitforbuttonpre
  • 使用JQUERY/JSON自动填充选择下拉框

    好吧 我花了很多时间查看示例 但找不到一个对我的情况有足够帮助的示例 我有一个 JSON 文件 对此示例进行了简化 Company Position Manager Name 11 joe 12 bill 166 John Position
  • 在没有“new List”的情况下初始化列表属性会导致 NullReferenceException

    using System using System Collections Generic class Parent public Child Child get set class Child public List