【问题标题】:Is it possible to use C# optional parameters as variable? [closed]是否可以使用 C# 可选参数作为变量? [关闭]
【发布时间】:2020-12-08 20:12:20
【问题描述】:

问题是我需要将随机变量传递给可选参数。任何人? :)

类似这样的:

static void Creature(string optionalParam = randomVariable) {}

【问题讨论】:

  • 如果这是您需要的,该语言通过方法重载支持它的时间更长。不接受参数的重载调用接受并传递randomVariable的重载。
  • 方法签名中不允许使用任何代码,只能使用const int DefaultValue = 10; void Method(int value = DefaultValue) 等常量。我们不能在参数中使用方法调用、类实例成员或任何其他东西。方法签名是一个契约,即类定义的 C++ 虚拟表中的“接口”部分。
  • 除了带有重载的答案之外,如果有多个参数,您可能会感兴趣,当它们为空时,您可以通过代码分配它们:stackoverflow.com/questions/65162175/…

标签: c# optional-parameters


【解决方案1】:

可选参数是编译时常量,因此不能将随机(运行时生成)值作为可选参数值。

正如@madreflection 所逃避的那样,您可以做的是创建 2 个重载方法:一个将接受您传递给它的 randomValue,而第二个不带该参数的方法会生成一个随机数,然后调用第一个重载,传递该随机数一起值。有意义吗?

【讨论】:

  • 我相信 OP 在这里的真正意思是“任意”而不是“随机”。它似乎与产生价值无关。
  • 似乎解决了OP的情况,或许你可以添加一些代码示例。
  • 我认为我们需要更多关于他在这里尝试做什么的信息。由于它是一个编译时间常数,他不能让 optionalParam 的默认值是随机的或任意的,所以他的方法是行不通的,但如果我们能在这里理解他的实际需求,我们可以建议一种不同的方法。跨度>
  • 我认为过载建议(顺便说一句,感谢您的支持)几乎可以解决任何此类用例。如果不是,那将是一个非常狭窄的边缘案例(很可能是需要重新考虑的设计错误),是的,我们需要了解更多。
  • 好的,更多信息:“如果未指定参数,则需要分配一个随机变量(在这种情况下是一个字符串但无关紧要)。”
【解决方案2】:

你只能通过重载来做到这一点

class Foo 
{
    static Random rng = new Random();
    static string RandomString()=> $"A{rng.Next(0,1000)}";

    static void Creature() => Creature(RandomString())
    static void Creature(string argument) {}
}

【讨论】:

    【解决方案3】:

    您可以使用 [可选] 关键字执行以下操作。 默认情况下,如果您不传递任何其他内容,则 optionalParam 值将为 Null,它将保留传递的值。 我希望它会清除可选参数。 参考:https://www.geeksforgeeks.org/different-ways-to-make-method-parameter-optional-in-c-sharp/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2012-12-02
      • 2019-10-10
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多