2013-03-29 1 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

Yup, который помогает. Фактически, я обнаружил, что правильным методом может быть испускание Activator.CreateInstance (T). Так как это автоматически создаст экземпляр объекта по умолчанию. – sircodesalot

+0

класс или структура? Если последнее, вы можете сделать 'this = new StructName()'. – leppie

ответ

4

что-то вроде:

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