怎么做一个网站送给女朋友,山东网站建设负面消息处理,国内品牌设计公司,怎样进行网站推广C# 11 更加实用的 nameofIntro从 C# 6.0 开始#xff0c;我们可以开始使用 nameof 来引用参数名称#xff0c;在可能使用 nameof 的地方#xff0c;一般都推荐使用以便于重构时的自动更新#xff0c;在之前的 C# 版本中#xff0c;如果想要在方法参数中或者方法 attribute… C# 11 更加实用的 nameofIntro从 C# 6.0 开始我们可以开始使用 nameof 来引用参数名称在可能使用 nameof 的地方一般都推荐使用以便于重构时的自动更新在之前的 C# 版本中如果想要在方法参数中或者方法 attribute 中通过 nameof 来引用方法会编译报错从 C# 11 开始扩展了 nameof 的作用域我们就可以使用了下面看几个示例SamplesMethod parameter reference在 .NET 6 中引入了一个新的调用者信息 Attribute CallerArgumentExpression , 使用它我们可以简化很多日志或者 metrics 记录等场景自动获取调用的信息但是美中不足的是我们需要使用字符串来引用方法参数如下所示public static ICollectionT NotEmptyT([NotNull] ICollectionT collection, [CallerArgumentExpression(collection)] string? paramName null)
{if (collection.Count 0){throw new ArgumentException(The collection could not be empty, paramName);}return collection;
}如这样的例子我们引用 collection 参数只能使用字符串这对于我们对 collection 参数名进行重构的时候就会仍然需要手动修改 CallerArgumentExpression 中的参数名在新版本中我们将可以直接使用 nameof(collection) 来代替字符串如下public static ICollectionT NotEmptyT([NotNull] ICollectionT collection, [CallerArgumentExpression(nameof(collection))] string? paramName null)
{NotNull(collection, paramName);if (collection.Count 0){throw new ArgumentException(The collection could not be empty, paramName);}return collection;
}这样就不容易出现一时手误参数名称输入错误而且 nameof 能够提供更好的重构体验Attribute reference除了方法参数中引用方法参数我们还可以使用方法的 Attribute 中引用方法参数示例如下[Description(nameof(nameExpression))]
public bool M(string name, [CallerArgumentExpression(nameof(name))]string nameExpression null)
{return string.IsNullOrEmpty(name);
}得益于 C# 中的常量插值字符串特性我们也是可以在 Attribute 中使用常量插值字符串的如下[Description(${nameof(nameExpression)} IsNullOrEmpty)]
public bool M(string name, [CallerArgumentExpression(nameof(name))]string nameExpression null)
{return string.IsNullOrEmpty(name);
}More目前该特性的支持已经完成并合并入主分支预计下个版本的 SDK 发布我们就可以使用了~~Referenceshttps://github.com/dotnet/csharplang/blob/main/proposals/extended-nameof-scope.mdhttps://sharplab.io/#v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKHQAYACdbAOgGEB7MABxpgFMYAXAWRoWYBsBuAsTKUASgFd2UMM2p16UXswBOAZRUA3KAGNmAZ0H4hAZjKYSVEgG8CJOyQDaAEX3blUemyhMAFABIAIisYCBkaADMfEJkAUQAPemV9PW8YAEoAXxIAST0AOXFeXgB5ZRiGNgBPALSAXVt7dFNgGhpeEg4fclJo5jhHKggilQBBZQBzcRl2eMTk1KjQ5gjFmTS67pJe2aS9FKYSAF4twt40kga7G3x7W7IAdhEiClyCotLyz0rV5jTDW4yBAyQA