情况是,我有以下课程,例如:

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/

10-12 12:44