मैं कोड उत्पन्न करने की कोशिश कर रहा हूं जो स्ट्रिंगबिल्डर लेता है, और एक वर्ग में सभी गुणों के मूल्यों को स्ट्रिंग में लिखता है। मैं निम्नलिखित मिल गया है, लेकिन मैं वर्तमान में एक "अवैध विधि टोकन" निम्नलिखित कोड में हो रही है:सीआईएल में स्ट्रिंगबिल्डर (एमएसआईएल)
public static DynamicAccessor<T> CreateWriter(T target) //Target class to *serialize*
{
DynamicAccessor<T> dynAccessor = new DynamicAccessor<T>();
MethodInfo AppendMethod = typeof(StringBuilder).GetMethod("Append", new[] { typeof(Object) }); //Append method of Stringbuilder
var method = new DynamicMethod("ClassWriter", typeof(StringBuilder), new[] { typeof(T) }, typeof(T), true);
var generator = method.GetILGenerator();
LocalBuilder sb = generator.DeclareLocal(typeof(StringBuilder)); //sb pointer
generator.Emit(OpCodes.Newobj, typeof(StringBuilder)); //make our string builder
generator.Emit(OpCodes.Stloc, sb); //make a pointer to our new sb
//iterate through all the instance of T's props and sb.Append their values.
PropertyInfo[] props = typeof(T).GetProperties();
foreach (var info in props)
{
generator.Emit(OpCodes.Callvirt, info.GetGetMethod()); //call the Getter
generator.Emit(OpCodes.Ldloc, sb); //load the sb pointer
generator.Emit(OpCodes.Callvirt, AppendMethod); //Call Append
}
generator.Emit(OpCodes.Ldloc, sb);
generator.Emit(OpCodes.Ret); //return pointer to sb
dynAccessor.WriteHandler = method.CreateDelegate(typeof(Write)) as Write;
return dynAccessor;
}
कोई भी विचार? अग्रिम धन्यवाद :)
:
इस के बराबर उत्पन्न करता है टिप्पणी करने के लिए) –