none
String.IndexOfAnyについて RRS feed

  • 質問

  • IndexOfAny(Char()) の Char() は Char配列ということで、

    Strict Onでは
      Dim f As String="abcd+efg" 
      Dim chars As Char()={"+"c,"-"c}
      Dim i As Integer=f.IndexOfAny(chars)
    というように使いますが、
    Strict Onにしなければ、正規表現を使っているかのように
    f.IndexOfAny("+-")
    でも同じ結果を得られます。
    「"+-"」が「Char配列」へ暗黙に型変換されたということなのでしょうか。

    2018年3月3日 21:37

回答

すべての返信

  • そうなります。

    Option Strict Offの状態で許可される処理の中に暗黙の縮小変換があります。暗黙の縮小変換にはいくつかの種類があり、暗黙の拡大変換の逆の行為が含まれます。暗黙の拡大変換の中には

    Char配列 → Char配列、String

    があるため、この逆変換、String → Char配列 が許されるのはOption Strict Offにする必要があります。

    なお、StringをChar配列に変換するためにString.ToCharArrayが用意されています。こちらは常に有効でOption Strictに影響されません。

    • 回答としてマーク nebokken 2018年3月4日 4:48
    • 回答としてマークされていない nebokken 2018年3月4日 4:48
    • 回答としてマーク nebokken 2018年3月4日 4:53
    2018年3月3日 21:59
  • 質問内容に書いたコードを

    Dim f As String = "abcd+efg"
    Dim i As Integer = f.IndexOfAny("+-".ToCharArray)

    に替えてみたところ同じ結果を得られました。

    現在 Strict On にはしていませんが、厳格なコードを書くように心がけています。

    Dim chars As Char() = {"+"c, "-"c}

    は一行ですけど面倒だなと思っていました。

    勉強になりました。ありがとうございます。

    2018年3月4日 4:53