投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/10/5 15:47:25
Option Infer ではなく、Option Strict ですね。
今回のケースでは、「ParameArray separator() As Char」のオーバーロードに渡されています。


Option Strict が Off の場合、sBunsho.Split(vbCrLf) が
エラー無く呼べてしまいますが、その結果は
 sBunsho.Split(CChar(vbCrLf))
へと解決されます。これは .Split(ControlChars.Cr) と同義です。

Option Strict On で動くコードとしては
 sArray = sBunsho.Split(vbCrLf.ToCharArray())
 sArray = sBunsho.Split(ControlChars.Cr, ControlChars.Lf)
などがありますが、これだと結果が変わってきてしまいますので、
shu さんが書かれたように、String の配列で渡すようにします。


なお、shuさんが書かれたコードを試す場合は、
VB2010 以上が必要になります。VB2005/2008 の場合は
 sArray = sBunsho.Split(New String() {vbCrLf}, StringSplitOptions.None)
というコードにしてあげてください。

また、VB.NET 2002/2003 の場合は、
String.Split では対応できないので、
Strings.Split で代用することになります。

sArray = Strings.Split(sBunsho, vbCrLf)



なお、sBunsho の値が Nothing だった場合、
sArray = sBunsho.Split({vbCrLf}, StringSplitOptions.None) はエラーになるので注意して下さい。
sArray = Strings.Split(sBunsho, vbCrLf) あるいは
sArray = CStr(sBunsho).Split({vbCrLf}, StringSplitOptions.None) なら大丈夫です。

VB2015の場合は、下記のような回避策もあります。
  sArray = sBunsho?.Split({vbCrLf}, StringSplitOptions.None)
ただし sBunsho が空の場合、sArray にも Nothing がセットされます。



> マイクロフトさんの解説では
「マイクロフトさん」だと、シャーロックホームズのお兄さんになってしまう…。


> sBunsho = sBunsho.Replace(vbCrLf , vbTab)
> sArray = sBunsho.Split(vbTab)
vbTab だと、文中に含まれていてもおかしくないので、置き換えるのであれば、
 sArray = sBunsho.Replace(vbCrLf, vbNullChar).Split(ControlChars.NullChar)
あるいは、
 sArray = sBunsho.Replace(vbCrLf, vbCr).Split(ControlChars.Cr)
の方が良いと思います。