none
要素数がわからない配列 RRS feed

  • 質問

  • C# 初心者です。

    要素数がわからない配列の定義やインスタンス化をどう記述すればいいのでしょうか?

    ご教授の程よろしく御願い致します。

    2006年4月5日 4:30

すべての返信

  • 動的配列ということならば

    System.Collections.ArrayListクラスをしらべてみてください。

    もっとも、C#2.0ならば、System.Collections.Generic.Listクラスにすべきでしょうけど。

     

    参考)@IT > Insider.NET > 特集 > C#&VBジェネリック超入門(前編)

     

    2006年4月5日 4:48
  • 蒼の洞窟様、ご教授ありがとうございます。

    System.Array型の変数を出力パラメータで使用したいのですが要素数がわからない場合、定義やインスタンス化をどのように記述すればよいのでしょうか?

    どうかご教授の程よろしく御願い致します。(初心者ですいません)

     

    2006年4月5日 5:26
  •  幸男 さんからの引用
    System.Array型の変数を出力パラメータで使用したいのですが要素数がわからない場合、定義やインスタンス化をどのように記述すればよいのでしょうか?

    具体的にどんなコードを書いているのでしょうか?

    失敗したのでも良いので載せてもらえませんか?

    2006年4月5日 5:32
  •  蒼の洞窟様、早速のご返信ありがとうございます。

    おそらくインスタンス化をしていないためにすぐエラーになってしまいますが途中のコードを記述致します。

    System.Array aaa = null;

    bbb(out aaa);

    ちなみに関数bbbは下記のように定義されているようです。

    void bbb(out System.Array ccc)

    どうかご教授の程よろしく御願い致します。(初心者ですいません)

    2006年4月5日 5:41
  • > 要素数がわからない場合、定義やインスタンス化をどのように記述すればよいのでしょうか?

    そもそも、「戻り値」で返す "べき" ですね。
    というか、System.Array 自体を格納用に使う場面なんてあまりないと思いますが。


        public static System.Array GetHogeArray() {
            string[] hoge = new string[10];

            for (int i = 0; i <= hoge.Length - 1; i++) {
                hoge[ i ] = i.ToString();
            }

            return hoge;
        }

     

    使用例です。


        public static void MosaMosaAA() {
            System.Array HogeHoge = GetHogeArray();
        }

     

    このように受け取る側は、インスタンス化する必要もなければ、要素数を知る必要はありません。
    参照渡しなどをすると、ややこしい話になりますので、戻り値として返す "べき" と述べました。

    動的だったら、本来は System.Collections.ArrayList などコレクションを使うべきです。
    これらから、配列に変換することもできますし。

    それにしても、System.Array にする理由がわからないですね。
    コレクションではなく配列を使うにしても、型は明示化されているべきです。

    # コレクションについては、既に蒼の洞窟さんからもアドバイスがありましたか...

    2006年4月5日 6:03
  • public class Test
    {
        public static void Main( string[] args )
        {
            System.Array aaa = null;
            BBB( out aaa );
            
            for ( int i = 0; i < aaa.Length; i++ )
            {
                System.Console.WriteLine( "aaa[{0}]={1}", i, ( ( int[] )aaa )[ i ] );
            }
        }
        
        public static void BBB( out System.Array ccc )
        {
            ccc = new int[ 10 ];
            for ( int i = 0; i < ccc.Length; i++ )
            {
             ( ( int[] )ccc )[ i ] = i;
            }
        }
    }

    みたいなこと?(キャストうざぃ)

    2006年4月5日 6:09
  • 蒼の洞窟様、じゃんぬねっと様、ご教授ありがとうございます。

    例で記述致しました関数bbbというのは

    既製品の関数でして引数や型をこちらから変える事が出来ない為に

    このように変な事をする必要がありました・・・すいませんでした。

     

    2006年4月5日 6:23