335得票4回答
何时使用record vs class vs struct

我是否应该在控制器和服务层之间移动数据的所有DTO类中都使用Record? 我是否应该在我的请求绑定中使用Record,因为理想情况下,我希望发送到控制器的请求对于我的asp.net API是不可变的? 什么是Record?Anthony Giretti介绍C# 9:Recordspu...

84得票2回答
预定义类型 'System.Runtime.CompilerServices.IsExternalInit' 未定义或未导入

我在测试C# 9.0的新功能时遇到了问题,使用Visual Studio 2019 Preview。我正在测试init setter,但编译器显示以下错误: Error CS0518 预定义类型'System.Runtime.CompilerServices.IsExternalInit'未定...

72得票4回答
在VS2019中测试C# 9.0 - CS0518 IsExternalInit未定义或未导入...如何定义/导入它?

编辑 [2020年11月29日]: .NET 5.0已经发布,但如果您的目标是.NET Standard 2.1,则仍需要下面的解决方案。 C# 9.0仍在开发中。有几个参考资料让我相信现在应该可以测试一些功能。 由Mr. Awesome本人撰写的微软博客,介绍了这些功能。https://...

59得票2回答
如何在C# 9中复制/克隆记录?

C# 9记录功能规范包括以下内容: 记录类型包含两个复制成员: 一个构造函数,接受记录类型的单个参数。它被称为“复制构造函数”。一个合成的公共无参数实例“clone”方法,具有编译器保留的名称。 但我似乎不能调用这两个复制成员: public record R(int A); // ...

54得票4回答
具有集合属性的记录类型和具有值语义的集合

在C# 9中,我们现在(终于)有记录类型:public record SomeRecord(int SomeInt, string SomeString); 这使我们获得了一些好处,例如值语义:var r1 = new SomeRecord(0, "zero"); var ...

53得票1回答
C# 9记录类型的自定义相等性检查

据我所了解,记录实际上是实现了自己的相等检查的类,以使您的对象是基于值而不是基于引用的。 简而言之,对于像这样实现的 record Foo:var foo = new Foo {Value = "foo"} 和 var bar = new Foo {Value = "foo"},foo ==...

52得票8回答
C#源代码生成器 - 警告CS8032:无法创建分析器的实例。

我正在尝试构建一个源代码生成器。目前,只有最基本的静态方法返回“Hello World”。 生成器项目已经构建完成,但生成的代码不可用,调试器从未启动,并且构建输出显示 CSC:警告CS8032:\bin\Debug\net5.0\Generator.StaticPropertyEnum.d...

49得票6回答
C# 9记录验证

使用C# 9的新记录类型,如何在构造对象时注入自定义参数验证/空值检查等,而无需重写整个构造函数? 类似于这样的操作:record Person(Guid Id, string FirstName, string LastName, int Age) { override void V...

48得票2回答
“is not null”和“!= null”有什么区别?

随着C# 9.0的发布,引入了否定的空值常量模式。 模式匹配的文档说明如下: 从C# 9.0开始,您可以使用否定的空值常量模式来检查非空值,如以下示例所示:if (e is not null) { // ... } 除了语法之外,“e is not null”和“e != null”...

47得票2回答
如何为记录类定位属性?

当定义记录类时,我如何将属性定向到参数、字段或属性?例如,我想使用JsonIgnore,但它不能编译,因为它有一个属性用法限制到字段或属性:record Person(string FirstName, string LastName, [JsonIgnore] int Age);