その記事で私が収集したことから、それは匿名型を作成しており、それを使用して値を取得しています。その場合、それらのオブジェクトにメソッドを追加する簡単な方法はありません。ただし、SP が実行されるたびに XML 構造が同じである場合は、必要なすべてのプロパティを持つ具象クラスを作成し、それらのオブジェクトのコレクションに XML を入力しないでください。そうすれば、必要なメソッドをクラスに直接簡単に追加できます...
編集:コメントでの議論に基づいて、ここに考えがあります:
そこのコードでは、型を構築するときに、ModuleBuilder.DefineType を使用しています。拡張する型を取る DefineType へのオーバーロードがあります。リンク。. したがって、インターフェイスを作成し (メソッドを含める必要はありません)、型を動的に構築する場合は、リンク先のオーバーロードを使用してそのインターフェイスを拡張します。次に、そのインターフェイスで Save() を実行する拡張メソッドを作成します。
拡張する型とインターフェイスを取る、興味深い別のオーバーロードがあります。
http://msdn.microsoft.com/en-us/library/f53tx4x8.aspx
EDIT2: コードサンプル:
まず、インターフェースを作成します。
public interface ISaveExtentable //I suck at naming stuff :-p
{
}
次に、そのサイトで気に入ったコードに、GetTypeBuilder というメソッドがあります。これを次のように変更します。
private static TypeBuilder GetTypeBuilder(string typeSigniture)
{
AssemblyName an = new AssemblyName("TempAssembly" + typeSigniture);
AssemblyBuilder assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
an, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");
TypeBuilder tb = moduleBuilder.DefineType("TempType" + typeSigniture
, TypeAttributes.Public |
TypeAttributes.Class |
TypeAttributes.AutoClass |
TypeAttributes.AnsiClass |
TypeAttributes.BeforeFieldInit |
TypeAttributes.AutoLayout
, typeof(object), new Type[] {typeof(ISaveExtentable)});
return tb;
}
次に、そのインターフェイスに拡張メソッドを作成して、保存を行います。
public static class SaveExtendableExtensions
{
public static void Save(this ISaveExtentable ise)
{
//implement save functionality.
}
}
型が動的に作成されたので、Save メソッドでリフレクションを使用してすべてのプロパティを取得する必要があります。