キー、順序、またはその他の明らかなインデックスのないオブジェクトのコレクションがあります。
各オブジェクトに関するデータを DataTable に格納したいと考えています。これを行うエレガントな方法は、所有者列に参照を保存し、その列を type にすることだと思いましたtypeof(MyClass)
。
ただし、実際にこれを実行しようとすると、機能しません (主キーが衝突すると言います)。インスタンスを行フィールドに入れると、フィールドに " MyProgram.MyClass
" が書き込まれるだけtoString
であることがMyClass
判明しstring
ました。
LINQPad で動作するサンプル コードを次に示します。
void Main()
{
// Create a table
var table = new DataTable();
var ownerColumn = new DataColumn("Owner", typeof(MyClass));
var primaryKey = new[] { ownerColumn };
table.Columns.AddRange(primaryKey);
table.PrimaryKey = primaryKey;
table.Columns.Add(new DataColumn("Some Data", typeof(int)) { DefaultValue = 0 });
// Create 2 objects
var c1 = new MyClass();
var c2 = new MyClass();
// Store their data in the table
var row = table.NewRow();
row["Owner"] = c1;
row["Some Data"] = 1;
table.Rows.Add(row);
row = table.NewRow();
row["Owner"] = c2;
row["Some Data"] = 2;
table.Rows.Add(row);
}
// Define other methods and classes here
class MyClass {
}
これを解決するにはどうすればよいですか? id
でフィールドを作成しMyClass
、それを使用id
して所有者列に入力し、作成時に各オブジェクトが一意になるようにする必要がありますid
か?