您建议以哪种方式返回非 null 的默认值

本文关键字:返回 null 默认值 方式 | 更新日期: 2023-09-27 18:31:18

我使用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";
}

过去,逻辑是下一个:

  • 使用 GetImageNameFunc 函数覆盖图像名称
  • 返回 null 或空字符串以指定,您需要使用默认图像

现在我想给用户另一种可能性:他必须能够指定,他根本不想要图像。因此,他必须能够从函数中返回一些值,这意味着他根本不希望获得图像:比方说,Image.None。

我想我可以使用一些常量,例如

public const string NoImageName = "|";

这将具有与图像不一致的值,并在事件注释中指定此常量。但我真的不喜欢那样。

有什么建议吗?

您建议以哪种方式返回非 null 的默认值

将方法拆分为两种情况:

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 = "|"这不是一个好主意。这是一个令人困惑的黑客。而不是使用魔术字符串创建一个类,该类保存一个字符串和一个布尔值,通知调用方是否使用了默认值。