使用.NET 6.0 Uri构造函数时触发错误:参数转换与空值问题
问题分析与解决
错误原因
你想调用的是Uri(Uri baseUri, string? relativeUri)构造函数,但第一个参数传的是string类型的baseUrl,编译器会优先匹配第一个参数为string的Uri构造函数。
.NET里存在Uri(string uriString, bool dontEscape)这个构造函数,当你第二个参数传null时,编译器会尝试把null转换成bool(但bool是值类型,不允许为null),同时触发route可能为null的警告,这就是报错的根源。另外,Uri(string, string)这个重载要求第二个参数不能为null,所以也无法匹配。
解决方案
有两种简单可行的处理方式:
1. 先将baseUrl转为Uri类型(推荐)
这样能精准匹配到你想要的Uri(Uri, string?)构造函数,这个重载允许第二个参数为null,此时会直接返回baseUri:
Uri baseUri = new Uri("https://example.com"); string? route = null; Uri test = new Uri(baseUri, route);
2. 处理route的null情况
如果不想提前转换baseUri,可以先判断route是否为空,再选择对应的构造函数:
string baseUrl = "https://example.com"; string? route = null; Uri test = string.IsNullOrEmpty(route) ? new Uri(baseUrl) : new Uri(baseUrl, route);
内容的提问来源于stack exchange,提问作者Muleskinner
相关产品推荐
相关产品推荐

