c# - 为什么我们不能设置在结构中创建的属性的值而不在 C# 中创建结构的构造函数?
解决方案
从语言参考:
通常,您通过使用 new 运算符调用适当的构造函数来实例化结构类型。每种结构类型至少有一个构造函数。这是一个隐式的无参数构造函数,它产生类型的默认值。您还可以使用默认值表达式来生成类型的默认值。
如果结构类型的所有实例字段都可以访问,您也可以在不使用 new 运算符的情况下对其进行实例化。在这种情况下,您必须在第一次使用实例之前初始化所有实例字段。
所以你可以通过调用它的构造函数来初始化一个结构,或者你可以声明一个未初始化的结构,然后在第一次使用之前手动初始化它的每个字段。
这里的技巧是您确实需要直接分配每个字段- 您不能调用初始化字段的方法(或属性设置器,这是一种特殊类型的方法)。这意味着如果您的结构具有自动属性,则不能使用此技术,因为无法直接初始化自动属性的支持字段。
(这是因为编译器需要检查您是否已明确分配给每个字段。如果您调用分配这些字段的方法/属性设置器,编译器无法检查该方法正在做什么,特别是如果结构是在单独的程序集中声明意味着它可以更改)。
推荐阅读
- c# - 有没有办法在不指定类型参数的情况下访问嵌套在泛型类中的类?
- javascript - React 应用程序转换为 react-native - react-redux 和 react-thunk 的问题
- python - 在 Django Web 框架中使用 TMDb API 检索数据库中电影的海报
- swt - 填充 TableViewer 时文本字段丢失
- sql - 批量插入数据库,跳过数据库中发现的重复项
- asp.net - 提交表单后,我在控制器中收到空值
- python - PyCharm 上的 virualenv 从 Linux 到 Windows
- c++ - 在 VS2019 解决方案中包含 MRPT 库时出现错误 C2039
- clojure - 如何根据 uri 在 reframe 中提供正确的面板?
- snowflake-cloud-data-platform - Snowflake 中的值对:变体还是对象?