因爲這是我在我看來,是非常有用的擴展方法的第一次嘗試,我只是想確認我要下去右路我的第一個擴展方法,可以寫得更好嗎?
public static bool EqualsAny(this string s, string[] tokens, StringComparison comparisonType)
{
foreach (string token in tokens)
{
if (s.Equals(token, comparisonType))
{
return true;
}
}
return false;
}
調用由
if (queryString["secure"].EqualsAny(new string[] {"true","1"}, StringComparison.InvariantCultureIgnoreCase))
{
parameters.Protocol = Protocol.https;
}
編輯:一些優秀的建議,通過我正在尋找的東西。由於
編輯:
我已經決定對下列實施
public static bool EqualsAny(this string s, StringComparison comparisonType, params string[] tokens)
{
// for the scenario it is more suitable for the code to continue
if (s == null) return false;
return tokens.Any(x => s.Equals(x, comparisonType));
}
public static bool EqualsAny(this string s, params string[] tokens)
{
return EqualsAny(s, StringComparison.OrdinalIgnoreCase, tokens);
}
我更喜歡使用PARAMS超過IEnumerable使用,因爲它簡化了調用代碼
if (queryString["secure"].EqualsAny("true","1"))
{
parameters.Protocol = Protocol.https;
}
相去甚遠上以前的
if (queryString["secure"] != null)
{
if (queryString["secure"] == "true" || queryString["secure"] == "1")
{
parameters.Protocal = Protocal.https;
}
}
再次感謝您!
我個人認爲,想了解一下您的擴展方法的語法之前,你應該問一個初步的問題:你甚至想這個方法。首先,正如其他人所提到的那樣,它只是一個令牌倒置。任何(),其次,在您的使用示例中,您已經採用了一個簡單的概念,「這是一個真正的價值」,應該易於閱讀和替換它帶有一個涉及自定義擴展方法和即時數組的複雜表達式。國際海事組織,這些不必要的複雜性的小點加起來。 – tnyfst 2009-05-22 13:17:39