如何扩展C#内置types,如String?

问候大家…我需要Trim一个String 。 但是我想要删除string本身中所有重复的空格,不仅在结尾或开始。 我可以用这样的方法来做到这一点:

 public static string ConvertWhitespacesToSingleSpaces(string value) { value = Regex.Replace(value, @"\s+", " "); } 

我从这里得到了什么 但是我想要在String.Trim()本身中调用这段代码,所以我认为我需要扩展或重载或重写Trim方法…有没有办法做到这一点?

提前致谢。

既然你不能扩展string.Trim()。 您可以按照此处所述的方法制作一个扩展方法,用于修剪和减less空白。

 namespace CustomExtensions { //Extension methods must be defined in a static class public static class StringExtension { // This is the extension method. // The first parameter takes the "this" modifier // and specifies the type for which the method is defined. public static string TrimAndReduce(this string str) { return ConvertWhitespacesToSingleSpaces(str).Trim(); } public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } } } 

你可以像这样使用它

 using CustomExtensions; string text = " I'm wearing the cheese. It isn't wearing me! "; text = text.TrimAndReduce(); 

给你

 text = "I'm wearing the cheese. It isn't wearing me!"; 

可能吗? 是的,但仅限于扩展方法

System.String类是密封的,所以你不能使用覆盖或inheritance。

 public static class MyStringExtensions { public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } } // usage: string s = "test !"; s = s.ConvertWhitespacesToSingleSpaces(); 

对你的问题有一个肯定的答案。

是的,您可以使用扩展方法扩展现有types。 扩展方法自然只能访问types的公共接口。

 public static string ConvertWhitespacesToSingleSpaces(this string value) {...} // some time later... "hello world".ConvertWhitespacesToSingleSpaces() 

不,你不能调用这个方法Trim()。 扩展方法不参与重载。 我想编译器甚至应该给你一个详细的错误信息。

扩展方法仅在包含定义方法的types的名称空间正在使用时才可见。

扩展方法!

 public static class MyExtensions { public static string ConvertWhitespacesToSingleSpaces(this string value) { return Regex.Replace(value, @"\s+", " "); } } 

除了使用扩展方法 – 这里可能是一个好的候选者 – 也可以“包装”一个对象(例如“对象组合”)。 只要包装的表单不包含比被​​包装的东西更多的信息,则包装的项目可以干净地通过隐式或显式转换进行传递,而不会丢失信息:只是types/接口的更改。

快乐的编码。