不错
我以为是如何在 C# 中坠入 il 的写法那哈哈
DynamicMethod method = new DynamicMethod("DataRowToEntity", null, new Type[] { typeof(DataRow), typeof(T) }, typeof(T));
ILGenerator il = method.GetILGenerator();
il.DeclareLocal(typeof(DataColumnCollection));
il.DeclareLocal(typeof(DataColumn));
il.Emit(OpCodes.Ldarg_0);
EmitCall(il, typeof(DataRow).GetProperty("Table").GetGetMethod());
EmitCall(il, typeof(DataTable).GetProperty("Columns").GetGetMethod());
il.Emit(OpCodes.Stloc_0);
foreach (FieldInfo field in typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
{
Label label = il.DefineLabel();
string fieldName = field.Name.TrimStart('_');
il.Emit(OpCodes.Ldloc_0);
il.Emit(OpCodes.Ldstr, fieldName);
EmitCall(il, typeof(DataColumnCollection).GetProperty("Item", new Type[] { typeof(string) }).GetGetMethod());
il.Emit(OpCodes.Dup);
il.Emit(OpCodes.Stloc_1);
il.Emit(OpCodes.Brfalse, label);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldloc_1);
EmitCall(il, typeof(DataRow).GetProperty("Item", new Type[] { typeof(DataColumn) }).GetGetMethod());
EmitCastObj(il, field.FieldType);
il.Emit(OpCodes.Stfld, field);
il.MarkLabel(label);
}
il.Emit(OpCodes.Ret);
海,哥们,不知道你对il.Emit有没有研究,你能否给我解释一下以上代码中,il.Emit()部门代码的意思,不胜感激.!
--引用--------------------------------------------------
李战: <img src="
http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" />
--------------------------------------------------------