55241


掲題の件、string[]の配列が返ってくる認識ですが、  
string[]自体がnull、またはstring[n]の値がnullで返ってくることは、  
ありますか？

関数仕様を知りたいです。

よろしくお願い致します。


CC BY-SA 4.0
2019-05-25T08:53:38.323
55239
2019-05-26T00:29:16.123
2019-05-25T15:47:38.387
76
9228
question
c#
string.Spilit()メソッドの返り値


仕様とか解説は以下になります。

[String.Split Method](https://docs.microsoft.com/ja-
jp/dotnet/api/system.string.split?view=netframework-4.8) / [StringSplitOptions
Enum](https://docs.microsoft.com/ja-
jp/dotnet/api/system.stringsplitoptions?view=netframework-4.8) / [方法:
String.Split を使用して文字列を解析する (C# ガイド)](https://docs.microsoft.com/ja-
jp/dotnet/csharp/how-to/parse-strings-using-split)

string[]自体がnullで返ることは無いですが、要素数が 0 のstring配列が返ることがあります。  
string[n]の値もnullで返ることは無いですが、空文字列(string.emptyとか""であらわされる)で返ることはあります。

いずれも`StringSplitOptions` の有無や値と、区切り文字が連続しているか、に係わってきます。

`StringSplitOptions` の指定が無いか値が `None`
で、元の文字列が空文字列や区切り文字のみの文字列とか、区切り文字が連続した箇所があると、string[n]の値が空文字列になります。

`StringSplitOptions` の指定があって値が `RemoveEmptyEntries`
で、元の文字列が空文字列や区切り文字のみの文字列の場合、返り値は要素数が 0 のstring配列となります。


CC BY-SA 4.0
2019-05-25T10:02:50.150
55241
2019-05-25T11:52:22.667
2019-05-25T11:52:22.667
26370
26370
55239
answer


直接の回答はkunifさんが書かれている通りです。

しかし、.NET
Frameworkクラスライブラリでは、そもそものライブラリ設計として、不正な値を返すことはせず、例外を投げるようにしています。そのため`String.Split`に限らずクラスライブラリ全体として、戻り値が`null`となっている可能性や配列内に`null`が混ざっている可能性は設計としてありません。

この点をもう一歩進めて、現在プレビュー版のC# 8.0では`null`が生成されない・`null`が返されないことを前提とした[
**null許容参照型**](https://docs.microsoft.com/ja-jp/dotnet/csharp/nullable-
references)が導入されます。この機能を有効化した場合、型は次のように表現されます。

  * `string[]` 配列自体は`null`になり得ないし、各要素も`null`になり得ない
  * `string[]?` 配列自体は`null`になり得るが、各要素は`null`になり得ない
  * `string?[]` 配列自体は`null`になり得ないが、各要素は`null`になり得る
  * `string?[]?` 配列自体は`null`になり得るし、各要素も`null`になり得る

もちろん`String.Split`の戻り値は `string[]` です。


CC BY-SA 4.0
2019-05-26T00:29:16.123
55249
2019-05-26T00:29:16.123
4236
55239
answer