相关疑难解决方法(0)

C#可选参数除了null参数外?

这个问题的最佳解决方案是什么?我正在尝试创建一个具有几个类类型可选参数的函数,其中null是一个有意义的值,不能用作默认值.如,

public void DoSomething(Class1 optional1, Class2 optional2, Class3 optional3)
    {
        if (! WasSpecified(optional1)) { optional1 = defaultForOptional1; }
        if (! WasSpecified(optional2)) { optional2 = defaultForOptional2; }
        if (! WasSpecified(optional3)) { optional3 = defaultForOptional3; }

        // ... do the actual work ...
    }

我不能使用Class1 optional1 = null因为null是有意义的.我不能使用一些占位符类实例,Class1 optional1 = defaultForOptional1因为这些可选参数的编译时常量要求我提出了以下选项:

  1. 为每种可能的组合提供重载,这意味着此方法有8次重载.
  2. 为每个可选参数添加一个布尔参数,指示是否使用默认值,这会使签名变得混乱.

有没有人想出一些聪明的解决方案呢?

谢谢!

编辑:我最后写了一个包装类,所以我没有必要继续重复Boolean HasFoo.

    /// <summary>
    /// A wrapper for variables indicating whether or not the variable has
    /// been set.
    /// …
Run Code Online (Sandbox Code Playgroud)

.net c#

8
推荐指数
3
解决办法
6658
查看次数

标签 统计

.net ×1

c# ×1