在Go中,我可以很容易地写这样的东西:
func isAvailableForUser(_ context.Context) bool { return true;}
func isAvailableForUser(_ context.Context) bool {
return true;
}
但C#的行为是不同的:
private bool IsAvailableForUser(IContext _) => true;
_是变量名,而不是类似于void的占位符。C#中Go代码的替代方案是什么?
_
tjrkku2a1#
Go不支持重载和parameter default value,所以为了保持函数签名的一致性,它必须保留一些参数。但是C#支持,所以如果方法不需要参数,你可以实现一个无参数的方法。稍后,如果需要将此方法传递给Func<IContext, bool>等委托,则可以定义一个重载方法来调用此无参数方法。
Func<IContext, bool>
private bool IsAvailableForUser() => true;private bool IsAvailableForUser(IContext _) => IsAvailableForUser();....Func<IContext, bool> d = IsAvailableForUser;
private bool IsAvailableForUser() => true;
private bool IsAvailableForUser(IContext _) => IsAvailableForUser();
....
Func<IContext, bool> d = IsAvailableForUser;
如果参数名由underscores followed by a number组成,C#分析器不会抱怨该参数未使用。所以基本上,你问题中的两个函数是等价的,除了你可以在C#中使用参数。
1条答案
按热度按时间tjrkku2a1#
Go不支持重载和parameter default value,所以为了保持函数签名的一致性,它必须保留一些参数。
但是C#支持,所以如果方法不需要参数,你可以实现一个无参数的方法。稍后,如果需要将此方法传递给
Func<IContext, bool>
等委托,则可以定义一个重载方法来调用此无参数方法。如果参数名由underscores followed by a number组成,C#分析器不会抱怨该参数未使用。所以基本上,你问题中的两个函数是等价的,除了你可以在C#中使用参数。