【问题标题】:C# - Class property as a method of variable numer of parameters [closed]C# - 类属性作为可变数量参数的方法[关闭]
【发布时间】:2020-07-08 22:59:44
【问题描述】:

我有以下课程

public class MyClass
{
  public int ElementId {get; set;}
  public int? LowerBoundary {get; set;}
  public int? UpperBoundary {get; set;}

  public int  SpecificMethod() {}

  public void CommonMethod()
  {
    int expectedValue = SpecificMethod();
  }
}

CommonMethod() 对于此类的每个实例都是相同的,但我希望 SpecificMethod() 对于每个实例都不同。此方法应始终返回一个 int,但它可以采用 0、1 或 2 个参数(它们是它自己的 LowerBoundary 和 UpperBoundary 属性值)。

有没有办法做到这一点?由于参数的数量是可变的,我知道我不能将 SpecificMethod 设为 Func 属性。

【问题讨论】:

  • 如果它们都是同一类型,您可以使用params
  • 您的问题不清楚。如果SpecificMethod() 方法应该依赖于LowerBoundaryUpperBoundary 属性的值,那为什么还需要将它们作为参数传递呢?为什么不让方法直接使用属性值?请修正您的问题,以便清楚您真正想要做什么。展示您认为可行的方法示例,说明您已经尝试过哪些尝试来实现该目标,以及具体而言您无法开展哪些工作。
  • 这能回答你的问题吗? Function with variable number of arguments

标签: c# methods method-parameters


【解决方案1】:

或许你可以使用params关键字:

public class MyClass
{

  public int SpecificMethod(params int[] values)
  {
    switch (values.Length)
    {
      case 0:
        ...
        break or return ...;
      case 1:
        ...
        break or return ...;
      case 2:
        ...
        break or return ...;
      default:
        ...
        break or return ...;
    }
    //return ...;
  }
}

https://docs.microsoft.com/dotnet/csharp/language-reference/keywords/params

还可以定义三个重载方法:

public class MyClass
{
  public int SpecificMethod()
  {
    return 0;
  }
  public int SpecificMethod(int value)
  {
    return 0;
  }
  public int SpecificMethod(int value1, int value2)
  {
    return 0;
  }
}

您可以使用所需的任何类型创建任意数量的重载方法。

https://docs.microsoft.com/dotnet/standard/design-guidelines/member-overloading

如果仅由实例使用,也许您可​​以将方法设置为私有或受保护。

【讨论】:

  • 嗯,好的。因此,现在,答案严格记录了params 关键字,当您应该投票关闭作为重复项时,添加新答案的意义何在?例如。 stackoverflow.com/questions/18194849/…stackoverflow.com/questions/9784630/…stackoverflow.com/questions/11808414/…
  • 坦率地说,我不相信params 实际上是这个不清楚的问题的答案,但任何认为它的人都应该认为这个问题是 many 直接解决该场景的现有问答,应该投票结束,而不是发布不会向网站提供任何新信息的新答案。
  • 您仅将超载作为次要建议。即使该建议适用,它在网站上也已经有大量重复项,而且比您在此处提供的更详细。例如。 stackoverflow.com/questions/9812084/…。不要介意你没有提供关于如何调用不同重载的建议,这样做对所询问的场景有什么帮助,或者如何区分单参数重载取决于它是 Upper... 还是 @987654333 @ 缺少的属性。
猜你喜欢
  • 2019-12-21
  • 2021-02-05
  • 2014-04-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2016-03-24
相关资源
最近更新 更多