情况是,我有以下课程,例如:
public class SendFile
{
public SendFile(Uri uri) { /* some code here */ }
public SendFile(string id) { /* some code here */ }
}
然后,我们知道,如果我想解析构造函数,则无法执行以下操作:
// some string defined which are called "address" and "id"
var sendFile = new SendFile(String.IsNullOrEmpty(address) ? id : new Uri(address));
我的问题是,如何在不创建代码“ if”分支的情况下,以干净的方式解决此问题?喜欢以下内容:
SendFile sendFile;
if(String.IsNullOrEmpty(address))
{
sendFile = new SendFile(id);
}
else
{
sendFile = new SendFile(new Uri(address));
}
最佳答案
一种选择是向static
添加SendFile
'factory'方法并在那里进行处理:
public class SendFile
{
public SendFile(Uri uri) { /* some code here */ }
public SendFile(string id) { /* some code here */ }
public static SendFile Create(string url, string fallbackId = null)
{
return string.IsNullOrEmpty(url)
? new SendFile(fallbackId)
: new SendFile(new Uri(url));
}
}
参数命名应明确指出,仅当未提供
fallbackId
时才使用url
。关于c# - 解决重载中的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46116585/