我有一个MethodInfo
代表一个方法的对象,该方法采用ref struct
作为参数,并且该结构有一个ReadOnlySpan<byte>
场地。如何通过MethodInfo
目的?我不能使用MethodInfo.Invoke
因为Invoke
需要参数作为object?[]?
数组和一个struct
with a ReadOnlySpan<byte>
字段不能转换为object
.
那么如何通过反射调用方法并向其传递一个 ref 结构值,其中该结构具有类型字段ReadOnlySpan
?
这可以非常简单地实现MethodInfo.CreateDelegate() https://learn.microsoft.com/en-us/dotnet/api/system.reflection.methodinfo.createdelegate?view=net-5.0.
这是一个使用的示例通用重载之一 https://learn.microsoft.com/en-us/dotnet/api/system.reflection.methodinfo.createdelegate?view=net-5.0#System_Reflection_MethodInfo_CreateDelegate__1_System_Object_,自 .NET 5.0 起可用:
public ref struct MyRefStruct
{
private ReadOnlySpan<byte> myReadOnlySpan;
public MyRefStruct(ReadOnlySpan<byte> myReadOnlySpan) =>
this.myReadOnlySpan = myReadOnlySpan;
public void Print()
{
foreach (byte b in myReadOnlySpan)
{
Console.WriteLine(b);
}
}
}
public class MyClass
{
private void PrintMyRefStruct(MyRefStruct myRefStruct) => myRefStruct.Print();
}
delegate void MyDelegate(MyRefStruct myRefStruct);
var myClass = new MyClass();
var myRefStruct = new MyRefStruct(new ReadOnlySpan<byte>(new byte[] { 0, 1 }));
var methodInfo = typeof(MyClass).GetMethod(
"PrintMyRefStruct",
BindingFlags.Instance | BindingFlags.NonPublic
);
methodInfo.CreateDelegate<MyDelegate>(myClass)(myRefStruct);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)