在有关解构的文章中了解更多信息 。
改进的明确分配
如果你使用尚未明确分配的值 , C# 会产生错误 。 C# 10 可以更好地理解你的代码并且产生更少的虚假错误 。 这些相同的改进还意味着你将看到更少的针对空引用的虚假错误和警告 。
在 C# 10 中的新增功能文章中了解有关 C# 确定赋值的更多信息 。
C# 10 中的新增功能文章
https://docs.microsoft.com/dotnet/csharp/whats-new/csharp-10#improved-definite-assignment
扩展的属性模式
C# 10 添加了扩展属性模式 , 以便更轻松地访问模式中的嵌套属性值 。 例如 , 如果微软在上面的 Person 记录中添加一个地址 , 微软可以通过以下两种方式进行模式匹配:
object obj = new Person { FirstName = "Kathleen", LastName = "Dollard", Address = new Address { City = "Seattle" } }; if (obj is Person { Address: { City: "Seattle" } }) Console.WriteLine("Seattle"); if (obj is Person { Address.City: "Seattle" }) // Extended property pattern Console.WriteLine("Seattle");
扩展属性模式简化了代码并使其更易于阅读 , 尤其是在匹配多个属性时 。
在模式匹配文章中了解有关扩展属性模式的更多信息 。
模式匹配文章
https://docs.microsoft.com/dotnet/csharp/languagereference/operators/patterns#property-pattern
调用者表达式属性
【微软正式发布C# 10】CallerArgumentExpressionAttribute 提供有关方法调用上下文的信息 。 与其他 CompilerServices 属性一样 , 此属性应用于可选参数 。 在这种情况下 , 一个字符串:
void CheckExpression(bool condition, [CallerArgumentExpression("condition")] string? message = null ) { Console.WriteLine($"Condition: {message}"); }
传递给 CallerArgumentExpression 的参数名称是不同参数的名称 。 作为参数传递给该参数的表达式将包含在字符串中 。 例如 ,
var a = 6; var b = true; CheckExpression(true); CheckExpression(b); CheckExpression(a > 5); // Output: // Condition: true // Condition: b // Condition: a > 5
ArgumentNullException.ThrowIfNull 是如何使用此属性的一个很好的示例 。 它通过默认提供的值来避免必须传入参数名称:
void MyMethod(object value){ ArgumentNullException.ThrowIfNull(value);}
了解有关 CallerArgumentExpressionAttribute 的更多信息
https://docs.microsoft.com/dotnet/csharp/languagereference/attributes/caller-information#argument-expressions
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
