我怎样才能有条件输出参数

时间:2015-04-30 11:45:28

标签: c#

方法DoSomething()确实创建了MyClass的实例,但并非所有人都想知道MyClass-Object,如果您只是知道该操作是否成功,它有时也适合。

这不会编译

public bool DoSomething(out Myclass myclass = null)
{
    // Do something
}
  

ref或out参数不能具有默认值

当然我可以简单地删除out-Keyword,但我需要先分配任何变量,这不是我的意图。

这可能是一种解决方法,但我希望bool成为返回类型

public Myclass DoSomething() //returns null if not successful
{
    // Do something
}

有人知道一个很好的解决方法吗?

3 个答案:

答案 0 :(得分:6)

只是超载:

public bool DoSomething()
{
    myClass i;
    return DoSomething(out i);
}

public bool DoSomething(out myClass myclass)
{
    myclass = whatever;
    return true;
}

然后拨打DoSomething()

答案 1 :(得分:4)

您可以将参数包装在一个类中。

class Arguments
{
public Argument () { Arg = null; }
public Myclass Arg { get; set; }
}

然后像:

一样使用它
Arguments args;
if (DoSomething (args))
{
  // args.Arg is something
}

并定义如下函数:

bool DoSomething (Arguments args)
{
  bool success = false;
  if (someaction)
  {
    args.Arg = new Myclass;
    success = true;
  }
  return success;
}

替代方案,这让我觉得有点脏,使用例外: -

Myclass DoSomething ()
{
  if (someactionhasfailed)
  {
    throw new Exception ("Help");
  }
  return new Myclass;
}

答案 2 :(得分:4)

如果您不想重载该方法,您可以随时创建一个新类:

public class Response
    {
    public bool Success{get;set;}
    public Myclass MyclassInstance {get;set;}
    }

并使用它作为DoSomething()方法的返回参数,具有以下签名:

public Response DoSomething() 
{
    // Do something
}