Delegate.CreateDelegate(类型、对象、方法信息)抛出 ArgumentException "Cannot bind to the target method..."
Delegate.CreateDelegate(Type, object, MethodInfo) throws ArgumentException "Cannot bind to the target method..."
我使用序列化程序“NetStack.BitBuffer”。通过反射,我得到了所有读取方法,如 Int32 ReadInt、UInt32 ReadUInt 等。
为了加快从 methodinfo 的调用,我创建了委托,但在下次我想工作之后突然发生,甚至正在记录它以制作 vlog,但相同的代码显示异常。我调试了它,所有值都正确,但仍然无法正常工作。
public class BitBuffer // Recreated to test it
{
public int ReadInt()
{
return 1;
}
}
[Test]
public void DelegateCreateTest()
{
BitBuffer bitBuffer = new BitBuffer();
MethodInfo readIntMethod = bitBuffer.GetType().GetMethod("ReadInt");
Assert.IsNotNull(readIntMethod, "Should not be null");
var func = (Func<object>)Delegate.CreateDelegate(typeof(Func<object>), bitBuffer, readIntMethod);
Assert.IsNotNull(func, "Should not be null");
}
上面的测试代码在异常开始显示之前有效。
System.ArgumentException: 'Cannot bind to the target method because its signature is not compatible with that of the delegate type.'
如果将我的 self 更改为 Func<int>
那么它可以工作,但你可以猜到..所有其他 return 类型的方法都将无效。
如果我 google 它实际上什至不可能做到这一点,除了 post:我发现的相同代码在这里并且看起来它应该实际工作:
我真的很喜欢矩阵中的错误,无法解释为什么它突然不起作用。太糟糕了,我没有使用 git 来了解不同之处。
the return type of a delegate is compatible with the return type of a
method if the return type of the method is more restrictive than the
return type of the delegate.
虽然所有引用类型都被认为与 object
兼容,但像 int
这样的值类型需要装箱才能生成兼容类型。 CreateDelegate
不提供此服务。
我使用序列化程序“NetStack.BitBuffer”。通过反射,我得到了所有读取方法,如 Int32 ReadInt、UInt32 ReadUInt 等。
为了加快从 methodinfo 的调用,我创建了委托,但在下次我想工作之后突然发生,甚至正在记录它以制作 vlog,但相同的代码显示异常。我调试了它,所有值都正确,但仍然无法正常工作。
public class BitBuffer // Recreated to test it
{
public int ReadInt()
{
return 1;
}
}
[Test]
public void DelegateCreateTest()
{
BitBuffer bitBuffer = new BitBuffer();
MethodInfo readIntMethod = bitBuffer.GetType().GetMethod("ReadInt");
Assert.IsNotNull(readIntMethod, "Should not be null");
var func = (Func<object>)Delegate.CreateDelegate(typeof(Func<object>), bitBuffer, readIntMethod);
Assert.IsNotNull(func, "Should not be null");
}
上面的测试代码在异常开始显示之前有效。
System.ArgumentException: 'Cannot bind to the target method because its signature is not compatible with that of the delegate type.'
如果将我的 self 更改为 Func<int>
那么它可以工作,但你可以猜到..所有其他 return 类型的方法都将无效。
如果我 google 它实际上什至不可能做到这一点,除了 post:我发现的相同代码在这里并且看起来它应该实际工作:
我真的很喜欢矩阵中的错误,无法解释为什么它突然不起作用。太糟糕了,我没有使用 git 来了解不同之处。
the return type of a delegate is compatible with the return type of a method if the return type of the method is more restrictive than the return type of the delegate.
虽然所有引用类型都被认为与 object
兼容,但像 int
这样的值类型需要装箱才能生成兼容类型。 CreateDelegate
不提供此服务。