根据我在那篇文章中收集到的信息,它正在为您创建匿名类型,并且您正在使用它来获取值。如果是这种情况,就没有简单的方法可以向这些对象添加方法。但是,如果每次 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 方法中使用反射来获取所有属性。