从静态 class 传递委托数组
Passing delegate array from static class
我正在尝试实例化一个 class,它接受从静态 class 的静态方法到 cunstructor(Func<string, bool>[]
) 的委托数组,它抛出异常System.ArgumentException: Delegate to an instance method cannot have null 'this'.
在静态 class 内部使用此数组本身不会造成问题,仅当我尝试传递数组时才会出现异常。
public static class Program
{
private static readonly MyAnotherClass MyAnotherField; // this is the error, see the answer below
private static readonly Func<string, bool>[] UsefulMethods =
{
UsefulMethod1,
// other methods
}
private static readonly MyClass MyClassField = new MyClass(UsefulMethods);
public static void Main(string[] args)
{
MyClassField.Handle(); // exception occurs here
}
private static bool UsefulMethod1(string value)
{
// some logic
return true;
}
}
public class MyClass
{
private readonly Func<string, bool>[] Methods;
public MyClass(Func<string, bool>[] methods)
{
// guards
Methods = methods;
}
public void Handle()
{
// some logic
}
}
我错过了什么?
所以我找到了解决方案。
示例在 fiddle 中不可重现,但在我的环境中,由于静态只读字段,我没有包含。
在上面的示例中,还应该有一个字段:
private static readonly MyAnotherClass MyAnotherClassField;
未在任何地方实例化。虽然我仍然不明白,为什么会抛出关于委托的异常,进行此更改:
private static readonly MyAnotherClass MyAnotherClassField = new MyAnotherClass();
使一切正常。
我正在尝试实例化一个 class,它接受从静态 class 的静态方法到 cunstructor(Func<string, bool>[]
) 的委托数组,它抛出异常System.ArgumentException: Delegate to an instance method cannot have null 'this'.
在静态 class 内部使用此数组本身不会造成问题,仅当我尝试传递数组时才会出现异常。
public static class Program
{
private static readonly MyAnotherClass MyAnotherField; // this is the error, see the answer below
private static readonly Func<string, bool>[] UsefulMethods =
{
UsefulMethod1,
// other methods
}
private static readonly MyClass MyClassField = new MyClass(UsefulMethods);
public static void Main(string[] args)
{
MyClassField.Handle(); // exception occurs here
}
private static bool UsefulMethod1(string value)
{
// some logic
return true;
}
}
public class MyClass
{
private readonly Func<string, bool>[] Methods;
public MyClass(Func<string, bool>[] methods)
{
// guards
Methods = methods;
}
public void Handle()
{
// some logic
}
}
我错过了什么?
所以我找到了解决方案。
示例在 fiddle 中不可重现,但在我的环境中,由于静态只读字段,我没有包含。
在上面的示例中,还应该有一个字段:
private static readonly MyAnotherClass MyAnotherClassField;
未在任何地方实例化。虽然我仍然不明白,为什么会抛出关于委托的异常,进行此更改:
private static readonly MyAnotherClass MyAnotherClassField = new MyAnotherClass();
使一切正常。