C#替代Go占位符变量

v9tzhpje  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(140)

在Go中,我可以很容易地写这样的东西:

  1. func isAvailableForUser(_ context.Context) bool {
  2. return true;
  3. }

但C#的行为是不同的:

  1. private bool IsAvailableForUser(IContext _) => true;

_是变量名,而不是类似于void的占位符。C#中Go代码的替代方案是什么?

tjrkku2a

tjrkku2a1#

Go不支持重载和parameter default value,所以为了保持函数签名的一致性,它必须保留一些参数。
但是C#支持,所以如果方法不需要参数,你可以实现一个无参数的方法。稍后,如果需要将此方法传递给Func<IContext, bool>等委托,则可以定义一个重载方法来调用此无参数方法。

  1. private bool IsAvailableForUser() => true;
  2. private bool IsAvailableForUser(IContext _) => IsAvailableForUser();
  3. ....
  4. Func<IContext, bool> d = IsAvailableForUser;

如果参数名由underscores followed by a number组成,C#分析器不会抱怨该参数未使用。所以基本上,你问题中的两个函数是等价的,除了你可以在C#中使用参数。

相关问题