私はそれがあなたのために匿名型を作成しています、そしてあなたが値を取得することを使用している、その記事に集まったものから。その場合、それらのオブジェクトにメソッドを追加する簡単な方法はありません。ただし、SPが実行されるたびにXML構造が同じである場合は、必要なすべてのプロパティを持つ具象クラスを作成し、それらのオブジェクトのコレクションをXMLで埋め込むことをおすすめします。そのように、あなたは簡単にあなたがクラスに直接必要なすべてのメソッドを追加することができます...
EDIT:あなたが構築しているとき、そこにコードで
:コメント欄で私たちの議論に基づいて、ここで考えたのですタイプを使用すると、ModuleBuilder.DefineTypeが使用されます。拡張する型を取るDefineTypeのオーバーロードがあります。 Link.。したがって、インターフェイスを作成してください(イベントにはメソッドがなくてもかまいません)。タイプを動的に構築する場合は、リンク先のオーバーロードを使用してそのインターフェイスを拡張します。次に、そのインターフェイス上に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;
}
、保存を行うためにそのインターフェイス上で拡張メソッドを作成します。:これにそれを変更するには、最も可能性のすべてを取得するためにあなたのSaveメソッドでリフレクションを使用する必要があります
public static class SaveExtendableExtensions
{
public static void Save(this ISaveExtentable ise)
{
//implement save functionality.
}
}
をタイプが動的に作成されたため
を、私はプロジェクトの BRD 1245 RFW 3456 InstanceNameは>名を取得し、 "XML構造はSPが実行されるたびに同じになる場合"! など 毎回属性が異なる:( –
はい、確かに選択可能な属性のリストがあります。これらの属性をすべてNullableフィールドとして(値型の場合)あなたが戻ってきたものだけを移入します。私は、タイプを動的に構築するためにいくつかのクレイジーなソリューションを使う必要はないと思っています... – BFree
XMLは動的に生成され、 –