我正在开发一个允许用户实例化某些委托的库。
我定义了一个委托类型,该类型处理结构体作为其参数之一,我们仅需要读取而不修改,因此in
关键字似乎很有用。
public struct SomeStruct
{
public string x;
// and possibly more...
}
public delegate void MyDelegate(object foo, in SomeStruct bar);
然而,当我尝试创建时,它告诉我需要放置
in
。// Parameter 2 must be declared with the 'in' keyword
MyDelegate x = (foo, bar) => System.Console.WriteLine(bar.x);
如果我使用in
,现在必须显式地键入参数...
// doesn't work
MyDelegate x = (foo, in bar) => System.Console.WriteLine(bar.x);
但是现在我明确地输入了第二个参数,第一个参数也需要明确。
// Inconsistent lambda parameter usage; parameter types must be all explicit or all implicit
MyDelegate x = (foo, in SomeStruct bar) => System.Console.WriteLine(bar.x);
// ok
MyDelegate x = (object foo, in SomeStruct bar) => System.Console.WriteLine(bar.x);
在我的用例中,参数foo
和bar
的类型可能具有很长的名称、泛型参数等。
在定义此委托类型时已经有了类型信息。有没有办法避免让用户显式地为此委托键入参数?
我原以为(foo, bar) =>
或(foo, in bar) =>
可以工作,但实际上不行。
编辑:我继续尝试并发现这对于ref
也是一样的问题,我猜测其他所有参数修饰符也是如此。因此,问题的名称已经从仅询问in
更改为普遍的修改器。