【问题标题】:c# Recursive Method Parameter [closed]c#递归方法参数
【发布时间】:2018-02-07 10:57:29
【问题描述】:

这并不重要。我只是想知道。提前感谢您的帮助。

void AddAccount(string name, string surname, DateTime age, string phone, string username, string pwd)
{
     // Codes...
     // I want to call this method again.
     // This a example.


     if(Msg("Registration is available. Add it again."))
        AddAccount(name, surname, age, phone, username, pwd);
}

有没有自动取参数的方法?

我知道我可以做不同的事情。但我只是想知道这样的语法是否存在。

【问题讨论】:

  • 你应该用文字而不是代码来提问。然后为上下文或示例提供代码示例。
  • 你的问题很不清楚。你到底在问什么?
  • 你已经展示了一个递归的例子,但是它将永远运行(好吧,直到你得到一个StackOverflowException)。通常,如果您想要递归调用,您将有一些条件检查是否会在某个时候停止递归。你想做什么?
  • 感谢您的回复。我只想在使用相同参数的代码中调用此方法。这将通过确认消息框进行处理。

标签: c# recursion methods syntax parameters


【解决方案1】:

我认为您正在寻找的是避免再次指定参数的快捷方式:

void AddAccount(string name, string surname, DateTime age, string phone, string username, string pwd)
{
     // Codes...
     // I want to call this method again.

     // Is there a method that automatically takes parameters instead?
     AddAccount(params);
}

C# 中不存在这样的语法。另一种方法是创建参数类型:

private struct Person 
{
    public string Name;
    public string Surname;
    public DateTime Age;
    public string Phone;
    public string Username;
    public string Password;
}

然后你可以有一个私有重载,它采用 param 类:

void AddAccount(string name, string surname, DateTime age, string phone, string username, string pwd)
{
     Person person = new Person
     {
        Name = name,
        Surname = surname,
        Age = age,
        Phone = phone,
        Username = username,
        Password = password
     }
     AddAccount(person);
}

private void AddAccount(Person person)
{
     // Codes...

     // I want to call this method again.
     AddAccount(person);
}

【讨论】:

  • 感谢您的回复。这是一个更长但重写这些参数的解决方案。我想学习降低代码复杂度。感谢您了解到没有这样的词。
  • 另一个好处是它可以提供更好的类型安全性。您可以在第二次调用中轻松切换namesurname 参数,编译器不会抱怨,但您显然会在运行时遇到问题。
  • 我会在某些地方使用它。谢谢你。 @D 斯坦利
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多