带有委托的隐式参数修饰符?(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一般修饰符

以上是带有委托的隐式参数修饰符?(C#)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>