2014-11-21 116 views
1

我使用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或空字符串指定,你需要使用默認圖像

現在我想給用戶一個更多的可能性:他必須能夠指定,即h e根本不想有圖像。所以,他必須能夠從函數中返回一些值,這意味着他不希望完全得到圖像:比方說,Image.None。

我想我可以使用一些常量像

public const string NoImageName = "|"; 

,這將有一個值是對個人形象不相稱,並在事件評論指定此常數。但我並不喜歡那種方式。

有什麼建議嗎?

+0

返回一個定義的字符串(即'|')意味着這個功能的使用者必須能夠理解它的含義並在它看到它時做一些事情。既然如此,我只是堅持要返回'null'並處理該消費者中的默認圖像。通過消費者,這可能是同一個班級內的另一種方法。 – 2014-11-21 12:54:12

+0

爲什麼不簡單地添加一個'bool'參數,詢問他是否想在沒有圖像時退出到默認值? – 2014-11-21 12:54:41

回答

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 = "|"這不是一個好主意。這是一個混亂的黑客。而不是使用魔術字符串創建一個類,其中包含一個字符串和一個布爾值,通知調用者是否使用了默認值。

+0

是的,這就是我試圖得到我對OP的評論:) – 2014-11-21 12:54:42

+0

好吧,但是像這樣,用戶如何指定他根本不需要圖像?如果他返回null,它仍然是「default.png」。 – 2014-11-21 12:57:32

+0

用戶只需調用TryGetImageName()並獲取null。或者,他可以調用TryGetImageName(@default:null)。 – usr 2014-11-21 12:58:16