带有委托的隐式参数修饰符?(C#)
c#
我正在开发一个允许用户实例化一些委托的库。
我定义了一个委托类型,它将结构作为其参数之一处理,我们只需要读取而不需要修改,因此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一般修饰符