How to extend C# built-in types, like String?
Greetings everyone... I need to Trim
a String
. But I want to remove all the repeated blank spaces within the String itself, not only at the end or at the start of it. I could do it with a method like:
public static string ConvertWhitespacesToSingleSpaces(string value)
{
value = Regex.Replace(value, @"\s+", " ");
}
Which I got from here. But I want this piece of code to be called within the String.Trim()
itself, so I think I need to extend or overload or override the Trim
method... Is there a way to do that?
Thanks in advance.
Since you cannot extend string.Trim()
. You could make an Extension method as described here that trims and reduces whitespace.
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+", " ");
}
}
}
You can use it like so
using CustomExtensions;
string text = " I'm wearing the cheese. It isn't wearing me! ";
text = text.TrimAndReduce();
Gives you
text = "I'm wearing the cheese. It isn't wearing me!";
Is it possible? Yes, but only with an extension method
The class System.String
is sealed so you can't use overriding or inheritance.
public static class MyStringExtensions
{
public static string ConvertWhitespacesToSingleSpaces(this string value)
{
return Regex.Replace(value, @"\s+", " ");
}
}
// usage:
string s = "test !";
s = s.ConvertWhitespacesToSingleSpaces();
There's a yes and a no to your question.
Yes, you can extend existing types by using extension methods. Extension methods, naturally, can only access the public interface of the type.
public static string ConvertWhitespacesToSingleSpaces(this string value) {...}
// some time later...
"hello world".ConvertWhitespacesToSingleSpaces()
No, you cannot call this method Trim()
. Extension methods do not participate in overloading. I think a compiler should even give you a error message detailing this.
Extension methods are only visible if the namespace containing the type that defines the method is using'ed.
Extension methods!
public static class MyExtensions
{
public static string ConvertWhitespacesToSingleSpaces(this string value)
{
return Regex.Replace(value, @"\s+", " ");
}
}