- - PR -
DataRowCollectionについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-31 14:23
初歩的な質問ですが、書込みさせて頂きます。
DataSetでは、以下の通りにインスタンス生成出来ますが、 DataSet AA = new DataSet(); DataRowやDataRowCollection はインスタンス生成することが出来ません。 どういった理由からなのでしょうか? DataRowCollection AA = new DataRowCollection(); よろしくお願いします。 .NET Framework v1.1(C#) | ||||||||
|
投稿日時: 2006-10-31 14:48
DataRowCollectionについてはドキュメントにコンストラクタの説明がないので、
コンストラクタ自体公開されていない(Publicになっていない)のかな? この場合インスタンスを生成することはできませんね。 DataRowの場合は引数にDataRowBuilderクラスを渡せばインスタンスの生成は できるのでしょうけど、ドキュメントに「コードから直接使用するためのもの ではありません」と記述がありますから、利用しないほうがよいでしょう。 通常はDataTable.NewRowとかで新規行のインスタンスを作成しますね。 | ||||||||
|
投稿日時: 2006-10-31 15:18
どっとねっとふぁんさん、ありがとうございます。
このような関数があります。 用途:テーブル情報(DB)を取得し、DataRowCollectionで返す 内容:引数でref渡しにしたDataRowCollection型の変数に対して、関数内で取得した情報を引数のDataRowCollection型変数に設定する この関数の直前で空のDataRowCollectionを渡してあげて情報を取得したかったのですが、どっとねっとふぁんさんのお返事では「この作りは良くない」ということになりますよね? 実際、空で渡すと「未割り当ての〜」とコンパイルエラーが出ますので、他で取得している共有のstaticなDataRowCollection型変数を代入でコピーしていましたが、関数内部で引数のDataRowCollection型変数を初期化(.clear())してるタイミングで、共有側の変数も消去されました。(DataRowCollectionが参照型のためでした・・・)
このような作りは再設計すべきでしょうか? | ||||||||
|
投稿日時: 2006-10-31 16:12
本来はDataSetを使った方が良いとは思いますが、既存処理の範囲が広いため今回はダミーのDataRowCollection型変数(初回だけ適当に小さなDBを読み込んだプログラム上全く関係ない変数の追加)を渡すようにしました。
どっとねっとふぁんさん、ありがとうございました。 | ||||||||
|
投稿日時: 2006-10-31 16:17
んと、通常DataTableを使う場面だと思います。
1.1だとシリアライズができないので、Webサービスでのデータのやりとりに DataTableは使えませんが、関数間でのデータの受け渡しであれば十分利用可能かと。 | ||||||||
|
投稿日時: 2006-10-31 17:53
まず、refを使用する意味がありません。
値型・参照型、値渡し・参照渡しのそれぞれをしっかり理解しましょう。 次に、受け取ったDataRowCollectionに対してClearメソッドを使用していますが、あまりよろしくありません。 それなら、最初からDataRowCollectionにoutキーワードを付けてやって、メソッド内で生成しましょう。 #戻り値として返したい所ですが、見る限り、戻り値で処理結果コードか何かを返してるみたいなんで。 で、「DataRowCollectionはコンストラクタを公開していないから生成できないよ」ということになると思います。 DataRowCollectionのコンストラクタが公開されていないのは、DataRowCollectionが必ずDataTableによって作られ、そのDataTableと共に生滅するものだからです。DataRowCollectionの内部からも、DataTableへとアクセスします。 ということで、DataRowCollectionではなく、DataTableを扱うようにしましょう。
いまいちよくわからないのですが、読み込んだデータも全く関係のないデータなのですか? どちらにせよ、変数は使いまわしせず(グローバル変数は使わず)、必要な時に生成し、適切な責務を持たせましょう。 |
1