在重载中解析函数

OmG*_*OmG 2 c# overloading

案例是我有以下课程,例如:

public class SendFile
{
     public SendFile(Uri uri) { /* some code here */ }
     public SendFile(string id) { /* some code here */ }
}
Run Code Online (Sandbox Code Playgroud)

然后,我们知道如果我想解析构造函数,我不能这样做,如下所示:

// some string defined which are called "address" and "id"
var sendFile = new SendFile(String.IsNullOrEmpty(address) ? id : new Uri(address));
Run Code Online (Sandbox Code Playgroud)

我的问题是如何以干净的方式解决这个问题,而不在代码中创建"if"分支?喜欢以下内容:

SendFile sendFile;
if(String.IsNullOrEmpty(address))
{
     sendFile = new SendFile(id);
}
else
{
     sendFile = new SendFile(new Uri(address));
}
Run Code Online (Sandbox Code Playgroud)

Gil*_*een 6

在上面的版本中,您会收到以下编译错误:

无法确定条件表达式的类型,因为'string'和'System.Uri'之间没有隐式转换

阅读MSDN文档时,它指出:

first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换.


由于string并且Uri没有彼此之间的隐式转换(您也不想要,因为您为什么要使用两个不同的构造函数...),要使用条件运算符,您应该稍微改变一下:

var sendFile = String.IsNullOrEmpty(address) ? new SendFile(id) : 
                                               new SendFile(new Uri(address));
Run Code Online (Sandbox Code Playgroud)