网站模板吧,wordpress fluxus下载,怎么做健康咨询网站,外包公司属于劳务派遣吗前言在前面的文章中#xff08;《可空引用类型》#xff09;#xff0c;我们介绍过编译器会帮我们检查空引用#xff0c;但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查#xff1a;private void Test(WeatherForecast weatherForecast)
{if (weatherForecast n… 前言在前面的文章中《可空引用类型》我们介绍过编译器会帮我们检查空引用但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查private void Test(WeatherForecast weatherForecast)
{if (weatherForecast null){ throw new ArgumentNullException(nameof(weatherForecast));}
}在.NET 6中在ArgumentNullException类中添加了一个名为ThrowIfNull的新静态方法它允许我们快速检查和抛出 ArgumentNullExceptions有意思的是异常信息自动带出了参数名称这样可以有效避免使用nameof用错参数。那这是怎么做到的呢原理探究查看ThrowIfNull的定义可以看到还有一个默认参数使用了CallerArgumentExpression属性声明public static void ThrowIfNull([NotNull] object? argument, [CallerArgumentExpression(argument)] string? paramName null)在编译时编译器会把上面的代码编译成如下形式传入了参数名ArgumentNullException.ThrowIfNull(weatherForecast, weatherForecast);原理利用很可惜.NET 6没有提供更多类似ThrowIfNull的帮助方法但是我们可以利用CallerArgumentExpression实现自己的帮助类来简化卫语句。比如public class ArgumentExceptionHelper {public static void ThrowIfNullOrEmpty(string? argument, [CallerArgumentExpression(argument)] string? paramName null){if(string.IsNullOrEmpty( argument))throw new ArgumentNullException(paramName);}public static void ThrowIfOutOfRange(bool argument, [CallerArgumentExpression(argument)] string? paramName null){if (argument)throw new ArgumentOutOfRangeException(paramName);}
}//使用
ArgumentExceptionHelper.ThrowIfNullOrEmpty(name);ArgumentExceptionHelper.ThrowIfOutOfRange(age 0);最为奇妙的是CallerArgumentExpression的功能是表示一个参数将传递给另一个参数的表达式作为字符串捕获。错误提示的不是参数名称而是实际传入的表达式因此更清晰。例如下面的错误提示Age0结论在.NET 6之前.NET中已有三个[Caller*]属性可用[CallerMemberName][CallerFilePath][CallerLineNumber]详细介绍请参看https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.callermembernameattribute利用这些属性可以让编译器“神奇地”填充它们帮助我们轻松获取调用者信息。如果你觉得这篇文章对你有所启发请帮忙点个赞或者在看