Bởi vì đây là nỗ lực đầu tiên của tôi tại một phương pháp mở rộng mà dường như khá hữu ích với tôi, tôi chỉ muốn chắc chắn rằng tôi đang đi xuống con đường đúngPhương pháp mở rộng đầu tiên của tôi, nó có thể được viết tốt hơn không?
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;
}
gọi bởi
if (queryString["secure"].EqualsAny(new string[] {"true","1"}, StringComparison.InvariantCultureIgnoreCase))
{
parameters.Protocol = Protocol.https;
}
EDIT: Một số gợi ý xuất sắc thông qua, chính xác loại điều tôi đang tìm kiếm. Cảm ơn
EDIT:
tôi đã quyết định về việc thực hiện sau
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);
}
tôi ưa thích sử dụng params qua IEnumerable vì nó đơn giản hóa mã gọi
if (queryString["secure"].EqualsAny("true","1"))
{
parameters.Protocol = Protocol.https;
}
Một xa khóc trên trước đây
if (queryString["secure"] != null)
{
if (queryString["secure"] == "true" || queryString["secure"] == "1")
{
parameters.Protocal = Protocal.https;
}
}
Cảm ơn bạn một lần nữa!
Cá nhân, tôi nghĩ rằng bạn nên đặt một câu hỏi sơ bộ trước khi tự hỏi về cú pháp của phương pháp mở rộng của bạn: Bạn có thậm chí còn muốn phương pháp này. Đầu tiên, như những người khác đã đề cập, nó chỉ là một đảo ngược của tokens.Any(), và thứ hai, trong ví dụ sử dụng của bạn, bạn đã thực hiện một khái niệm đơn giản về "đây có phải là một giá trị thực" hay không dễ đọc và thay thế nó với một biểu thức phức tạp liên quan đến một phương thức mở rộng tùy chỉnh và một mảng on-the-fly. IMO, các bit nhỏ phức tạp không cần thiết này bổ sung. – tnyfst