Reflection.Emit将数组作为参数传递给方法

时间:2016-09-07 10:58:11

标签: c# reflection.emit

我试图在IL发射中创建一个setter,但是这个setter只能接受我的"数组中的字符串"如果没有,它必须抛出异常。我在使用checkIfAccept方法读取数组时遇到问题,我确定我错过了将数组指针存储在某个arg中的指令,但我不知道是哪一个。 在此先感谢,并为noob问题感到抱歉。

class Accept
{
    public void CreateIL(ILGenerator il, FieldBuilder field, string [] array)
    {
        il.Emit(?);
        il.Emit(OpCodes.Ldarg_1);  // Push "value" on the stack
        il.Emit(OpCodes.Ldarg_2); // suposed to push my array
        il.Emit(OpCodes.Call, typeof(Accept).GetMethod("checkIfAccept"));

        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Stfld, field);   // Set the field "_Name" to "value"
        il.Emit(OpCodes.Ret);
    }

    public void checkIfAccept(string obj, string [] array)
    {
        foreach(string str in array)
            if (str != obj) throw new MyException();
    }
}

0 个答案:

没有答案