方法DoSomething()
确实创建了MyClass
的实例,但并非所有人都想知道MyClass-Object
,如果您只是知道该操作是否成功,它有时也适合。
public bool DoSomething(out Myclass myclass = null)
{
// Do something
}
ref或out参数不能具有默认值
当然我可以简单地删除out-Keyword
,但我需要先分配任何变量,这不是我的意图。
public Myclass DoSomething() //returns null if not successful
{
// Do something
}
有人知道一个很好的解决方法吗?
答案 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
}