From 882e9ccdc95a4efe6eaf35a640e06506e27594fd Mon Sep 17 00:00:00 2001 From: Justin Van Patten Date: Tue, 13 Sep 2016 14:57:07 -0700 Subject: [PATCH] Update new String.Split methods to use optional params The new `Split(string)` overload broke source compat with uses of `Split(null)`, which is documented to split based on white space, because it makes the call ambiguous between `Split(char[])` and `Split(string)`. To maintain source compatibilty, `Split(string)` has been removed, leaving just the overloads with `StringSplitOptions` parameters, which are now optional. Making `StringSplitOptions` optional allows calls to `Split(string)` while maintaining source compat with calls to `Split(null)` which still binds to `Split(char[])` in C#, VB, and F#. The new `Split(char)` overloads get the same changes for consistency with `Split(string)`. --- src/mscorlib/model.xml | 2 -- .../src/System/String.Manipulation.cs | 20 ++++--------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/mscorlib/model.xml b/src/mscorlib/model.xml index 41ff879af30a..4a5991ee5d37 100644 --- a/src/mscorlib/model.xml +++ b/src/mscorlib/model.xml @@ -7123,14 +7123,12 @@ - - diff --git a/src/mscorlib/src/System/String.Manipulation.cs b/src/mscorlib/src/System/String.Manipulation.cs index e9568a6d03cd..8f456b6c6ffd 100644 --- a/src/mscorlib/src/System/String.Manipulation.cs +++ b/src/mscorlib/src/System/String.Manipulation.cs @@ -944,19 +944,13 @@ public String Replace(String oldValue, String newValue) } [ComVisible(false)] - public String[] Split(char separator) { - Contract.Ensures(Contract.Result() != null); - return SplitInternal(separator, Int32.MaxValue, StringSplitOptions.None); - } - - [ComVisible(false)] - public String[] Split(char separator, StringSplitOptions options) { + public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None) { Contract.Ensures(Contract.Result() != null); return SplitInternal(separator, Int32.MaxValue, options); } [ComVisible(false)] - public String[] Split(char separator, int count, StringSplitOptions options) { + public String[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None) { Contract.Ensures(Contract.Result() != null); return SplitInternal(separator, count, options); } @@ -1075,19 +1069,13 @@ private unsafe String[] SplitInternal(char* separators, int separatorsLength, in } [ComVisible(false)] - public String[] Split(String separator) { - Contract.Ensures(Contract.Result() != null); - return SplitInternal(separator ?? String.Empty, null, Int32.MaxValue, StringSplitOptions.None); - } - - [ComVisible(false)] - public String[] Split(String separator, StringSplitOptions options) { + public String[] Split(String separator, StringSplitOptions options = StringSplitOptions.None) { Contract.Ensures(Contract.Result() != null); return SplitInternal(separator ?? String.Empty, null, Int32.MaxValue, options); } [ComVisible(false)] - public String[] Split(String separator, Int32 count, StringSplitOptions options) { + public String[] Split(String separator, Int32 count, StringSplitOptions options = StringSplitOptions.None) { Contract.Ensures(Contract.Result() != null); return SplitInternal(separator ?? String.Empty, null, count, options); }