gpt4 book ai didi

c# - 带有委托(delegate)的隐式参数修饰符? (C#)

转载 作者:行者123 更新时间:2023-12-04 11:31:32 24 4
gpt4 key购买 nike

我正在开发一个允许用户实例化一些委托(delegate)的库。
我定义了一个委托(delegate)类型,它将结构作为其参数之一处理,我们只需要读取而不需要修改,所以 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);
现在在我的用例中,参数的类型 foobar可能有长名称、通用参数等。
类型信息已经存在于定义此委托(delegate)类型的地方。有没有办法避免让我的用户显式键入此委托(delegate)的参数?
我期待 (foo, bar) =>(foo, in bar) =>工作,但它没有。
编辑:我玩得更多,这似乎是 ref 的情况。同样,我猜测所有参数修饰符。所以问题名称从只询问 in 改为一般修饰符

最佳答案

不,您不能提供带有隐式匿名函数参数的修饰符。
如果你看 grammar in the ECMA standard - 当前用于 C# 6,因此缺少 in修饰符 - 你会看到 explicit_anonymous_function_parameter 之间的区别它包括一个可选的修饰符和一个类型,以及一个 implicit_anonymous_function_parameter这只是一个标识符:

explicit_anonymous_function_parameter
: anonymous_function_parameter_modifier? type Identifier
;

anonymous_function_parameter_modifier
: 'ref'
| 'out'
;

implicit_anonymous_function_parameter
: Identifier
;
我同意这可能有点令人沮丧 - 但我不希望它很快发生变化。

关于c# - 带有委托(delegate)的隐式参数修饰符? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68311567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com