dfe*_*aro 5 c# extension-methods
我有一个简单的字符串类扩展方法,它将从字符串中删除所有非数字字符.因此,如果我有一个字符串,例如电话号码,如"(555)215-4444",它会将其转换为"5552154444".它看起来像这样:
public static string ToDigitsOnly(this string input)
{
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(input, String.Empty);
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道在这里处理空值的最优雅方法是什么?在这些情况下是否存在典型模式,例如,如果传入null,则返回null值?看来,因为我在这里扩展字符串类,我可能想要允许空值而不抛出争论异常(因为我在使用它时并没有真正传递争论......)?但是有些人可能会说我应该像普通的方法那样抛出异常.你在这里使用的最佳做法是什么?
谢谢!
Ily*_*nov 10
您可以遵循最小惊喜的原则:使用LINQ中实现的模式:
public static string ToDigitsOnly(this string input)
{
if(input == null)
throw new ArgumentNullException("input");
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(input, String.Empty);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Jon Skeet提出的方法.它会简化为您的检查
input.ThrowIfNull("input");
Run Code Online (Sandbox Code Playgroud)
乔恩也具有良好的部分10.2.4上调用空引用的方法中的深度C# ,报价:
检查空白作为一名尽职尽责的开发人员,我确信您的生产方法始终在继续之前检查其参数的有效性.扩展方法的这种古怪特征自然产生的一个问题是当第一个参数为null时抛出的异常(假设它不是意图).它应该是ArgumentNullException,就好像它是一个普通的参数,或者它应该是NullReferenceException,如果扩展方法是一个开始的实例方法,这会发生什么?我推荐前者:它仍然是一个参数,即使扩展方法语法没有那么明显.
我将此建议视为(并根据我的个人经验):检查null是否总是更好,特别是对于静态方法,并且不依赖于空值.只有当它是你的方法的确切目的,例如一个例外ThrowIfNull或IsNullOrEmpty扩展方法.
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |