【发布时间】:2013-05-16 15:48:53
【问题描述】:
我有一个简单的字符串类扩展方法,它将从字符串中删除所有非数字字符。因此,如果我有一个字符串,例如电话号码,例如“(555) 215-4444”,它会将其转换为“5552154444”。它看起来像这样:
public static string ToDigitsOnly(this string input)
{
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(input, String.Empty);
}
我只是想知道在这里处理空值的最优雅的方法是什么?在这些情况下是否有一个典型的模式可以遵循,例如如果传入 null 则返回 null 值?似乎因为我在这里扩展了字符串类,所以我可能希望允许空值而不抛出争论异常(因为当我使用它时我并没有真正传递争论......)?但是有些人可能会争辩说我应该像“正常”方法一样抛出异常。您在这里使用的最佳做法是什么?
谢谢!
【问题讨论】:
-
我会将扩展方法视为普通方法。这只是一种整理人们阅读代码的方式。与其将 StringFunctions.ToDigitsOnly(s) 缩短为 s.ToDigitsOnly(),不如将其缩短为 s.ToDigitsOnly(),因此如果您要在其中一个中抛出异常,请在另一个中抛出它。
-
如果 null 是您的应用程序中的有效/预期值,则返回 null。如果不是,则抛出异常。我个人会在这里抛出一个 ArgumentException。
-
作为旁注;你在这里不需要正则表达式
String.Join("", input.Where(char.IsDigit)) -
你也可以
return new string(input.Where(char.IsDigit).ToArray());
标签: c# extension-methods