cdj*_*djc 5 c# reflection struct
我有一个MethodInfo代表方法的对象,该方法采用 aref struct作为参数,并且该结构有一个ReadOnlySpan<byte>字段。如何通过对象调用该方法MethodInfo?我无法使用,MethodInfo.Invoke因为Invoke需要参数作为object?[]?数组,并且struct带有ReadOnlySpan<byte>字段的参数不能转换为object.
那么如何通过反射调用方法并向其传递一个 ref 结构值,其中该结构具有 type 字段ReadOnlySpan?
这可以通过 非常简单地实现MethodInfo.CreateDelegate()。
下面是一个使用 .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);
Run Code Online (Sandbox Code Playgroud)