2013-03-29 53 views
5

我想要實現自動清除所有本地領域的接口,所以到目前爲止,我有:你會如何發出一個類型的默認值?

// Implement IClearable 
dynamicType.AddInterfaceImplementation(typeof(IClearable)); 

MethodBuilder clearnMethodBuilder = dynamicType.DefineMethod("Clear", MethodAttributes.Public | MethodAttributes.Virtual, CallingConventions.Standard); 
ILGenerator clearMethodILGen = clearnMethodBuilder.GetILGenerator(); 

foreach (FieldBuilder localField in fields) 
{ 
    clearMethodILGen.Emit(OpCodes.Ldarg_0); 
    clearMethodILGen.Emit(OpCodes.Ldfld, localField); 
    clearMethodILGen.Emit(OpCodes.??, Profit??); 
} 

clearMethodILGen.Emit(OpCodes.Ret); 

如何設置的最後一步,保存在字段的默認值?

+1

這是興趣? http://stackoverflow.com/questions/10400358/how-to-translate-defaultsometype-from-c-sharp-to-cil –

+0

是的,這有助於。其實,我發現正確的方法可能是發出Activator.CreateInstance(T)。因爲那會自動實例化默認對象。 – sircodesalot

+0

類或結構?如果是後者,則可以執行'this = new StructName()'。 – leppie

回答

4

類似:

clearMethodILGen.Emit(OpCodes.Ldfld, localField); 
clearMethodILGen.Emit(OpCodes.Initobj, localField.FieldType);