none
stringのインデクサ挙動が記載されているドキュメント RRS feed

  • 質問

  • stringのインデクサでインデクッス指定が文字列長の範囲を超えた場合の挙動について
    例外が発生するのか、それとも例外は発生せずに何らかの文字が返ってくるのか、
    挙動を調べたいのですが、正式なドキュメントを参照するとしたらどこを見るのが良いでしょうか?
    試せば分かる話ではあるのですが、ドキュメントに記載されているのであればそれを参照したく思います。
    (正しい情報の参照の仕方を覚えておきたい)

    2013年6月18日 11:21

回答

  • MSDN ライブラリで、String インデクサの『例外』の項を調べてみてください。範囲外のパラメーターに対して IndexOutOfRangeException を返すことが明記されています。

    http://msdn.microsoft.com/ja-jp/library/system.string.chars.aspx

    • 回答の候補に設定 octopus-jelly 2013年6月19日 0:37
    • 回答としてマーク kobayantk 2013年6月30日 11:13
    2013年6月18日 11:48
  • http://msdn.microsoft.com/ja-jp/library/s1wwdcbf.aspxMSDN のドキュメントにはインデクサーが抜けてますね。

    Visual Studio で String クラスの定義を見ると

    --

    // 概要:
    //     現在の System.String オブジェクト内の指定した位置にある System.Char オブジェクトを取得します。
    //
    // パラメーター:
    //   index:
    //     現在の文字列内の位置。
    //
    // 戻り値:
    //     index 位置にあるオブジェクト。
    //
    // 例外:
    //   System.IndexOutOfRangeException:
    //     index が、このオブジェクトの長さ以上であるか、または 0 未満です。

    --

    となってます。

    • 回答としてマーク kobayantk 2013年6月30日 11:13
    2013年6月18日 11:49
  • まず.NETに限らず、例外機構のある環境では、範囲外では例外が投げられます。.NETでも基本的に例外が投げられます。
    と言いつつ、.NETでもNameValueCollectionのように例外を投げずにnullを返すものもあるので困るわけですが…。

    また.NETクラスライブラリでインデクサの名前はほとんどItemです。
    例外はString、StringBuilderなどに限られるようです。.NET 4.5では次の7つぐらい。String、StringBuilderがCharsプロパティ。XmlNodeList、XmlAttributeCollection、EncryptionPropertyCollection、ReferenceListがItemOfプロパティ。さてPrintPropertyDictionaryは存在しないPropertyプロパティがインデクサーに指定されてるゾ!

    2013年6月20日 1:25

すべての返信

  • MSDN ライブラリで、String インデクサの『例外』の項を調べてみてください。範囲外のパラメーターに対して IndexOutOfRangeException を返すことが明記されています。

    http://msdn.microsoft.com/ja-jp/library/system.string.chars.aspx

    • 回答の候補に設定 octopus-jelly 2013年6月19日 0:37
    • 回答としてマーク kobayantk 2013年6月30日 11:13
    2013年6月18日 11:48
  • http://msdn.microsoft.com/ja-jp/library/s1wwdcbf.aspxMSDN のドキュメントにはインデクサーが抜けてますね。

    Visual Studio で String クラスの定義を見ると

    --

    // 概要:
    //     現在の System.String オブジェクト内の指定した位置にある System.Char オブジェクトを取得します。
    //
    // パラメーター:
    //   index:
    //     現在の文字列内の位置。
    //
    // 戻り値:
    //     index 位置にあるオブジェクト。
    //
    // 例外:
    //   System.IndexOutOfRangeException:
    //     index が、このオブジェクトの長さ以上であるか、または 0 未満です。

    --

    となってます。

    • 回答としてマーク kobayantk 2013年6月30日 11:13
    2013年6月18日 11:49
  • あら、インデクサーは Chars なのか。失礼しました。
    2013年6月18日 11:54
  • ご回答ありがとうございます。
    なるほど、Charsプロパティがインデクサとして働いているのですね。
    一般的に何らかのクラスのインデクサの情報を調べようと思ったらプロパティをひとつひとつ漁っていくことになるんでしょうか。
    たとえば String だと Chars がインデクサとして働いていますし、
    System.Collections.Generic.List だと Item がインデクサとして働いているようですし、
    どの名前を見ればインデクサの挙動が分かる、という
    決まりごとも特に無い感じですかね。。

    2013年6月19日 4:36
  • まず.NETに限らず、例外機構のある環境では、範囲外では例外が投げられます。.NETでも基本的に例外が投げられます。
    と言いつつ、.NETでもNameValueCollectionのように例外を投げずにnullを返すものもあるので困るわけですが…。

    また.NETクラスライブラリでインデクサの名前はほとんどItemです。
    例外はString、StringBuilderなどに限られるようです。.NET 4.5では次の7つぐらい。String、StringBuilderがCharsプロパティ。XmlNodeList、XmlAttributeCollection、EncryptionPropertyCollection、ReferenceListがItemOfプロパティ。さてPrintPropertyDictionaryは存在しないPropertyプロパティがインデクサーに指定されてるゾ!

    2013年6月20日 1:25
  • なるほど、参考になります。慣習として覚えておきます。
    イレギュラーなものがいくつかあるのは困りものですね。。
    2013年6月22日 8:30
  • フォーラム オペレーターの星 睦美です。
    kobayantk さん、こんにちは

    コミュニティの回答者からの情報が参考になったのではないかと思います。
    今後のコミュニティでの情報交換がより活発になりますように、ぜひ投稿者からスレッドに[回答としてマーク]いただければ幸いです。

    これからもMSDN フォーラムをよろしくお願いします。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年6月25日 1:26