我使用C#语言,但我认为这个问题不受语言限制。 我有下一个函数和方法来返回图像名称:
public Func<string> GetImageNameFunc { get; set; }
private string getImageName()
{
if (GetImageNameFunc != null)
{
string imageName = GetImageNameFunc();
if (!string.IsNullOrEmpty(imageName))
{
return imageName;
}
}
return "default.png";
}
过去的逻辑是下一个:
现在我想给用户一个更多的可能性:他必须能够指定,他根本不想拥有图像。因此,他必须能够从功能中返回一些价值,这意味着他根本不想获得图像:让我们说,Image.None。
我想我可以使用像
这样的常量public const string NoImageName = "|";
,其值将与图像不一致,并在事件注释中指定此常量。但我不是那么喜欢。
有什么建议吗?
答案 0 :(得分:3)
将方法拆分为两种情况:
string TryGetImageName()
{
if (GetImageNameFunc != null)
{
string imageName = GetImageNameFunc();
if (!string.IsNullOrEmpty(imageName))
{
return imageName;
}
}
return null; //no default!
}
string GetImageNameOrDefault() {
return TryGetImageName() ?? "default.png";
}
你的方法一次做两件事。
替代:
string TryGetImageName(string @default = "default.png") {
//...
return @default;
}
NoImageName = "|"
这不是一个好主意。这是一个混乱的黑客。而不是使用魔术字符串创建一个包含字符串的类和一个布尔值,通知调用者是否使用了默认值。