我有一个方法可以检查对象与我的程序(某些算法)的有效性。该对象是从传入的字符串创建(解析)的。
逻辑是:
bool isValid(String str, out Object obj)
{
obj = null;
obj = new Object(str); //Validation happens during the object creating
if(obj.Legit) //Don't mind this line :)
return true;
return false;
}
我从另一个类调用此验证,如果此验证失败,则执行不同的验证(相同方法)
void FindingObjectType(String str)
{
if(isValid(str, out ??????)
//process
}
所以不是?????,我不知道如何传递对象。
我只有一个构造函数,Object(String)。
答案 0 :(得分:8)
此MSDN文档描述了“out”关键字:
http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
在调用isValid()方法之前,需要声明输出对象:
void FindingObjectType(String str)
{
Object obj;
if(isValid(str, out obj)
//process
}
答案 1 :(得分:7)
正如尼克所说,通常你会说:
void FindingObjectType(String str)
{
object obj;
if(isValid(str, out obj)
{
// process valid obj
}
}
这完全可以接受。但是,还有其他方法可以做到更好:
Thing GetThing(String str)
{
Thing thing = new Thing(str);
if(thing.Legit)
return thing;
return null;
}
void FindingObjectType(String str)
{
Thing thing = GetThing();
if(thing != null)
//process
}
这是另一个:
Thing GetThing(String str)
{
// Make a static method that tests the string.
if (Thing.IsLegit(str))
return new Thing(str);
return null;
}
void FindingObjectType(String str)
{
Thing thing = GetThing();
if(thing != null)
//process
}
当然,如果您要这样做,为什么还需要GetThing?只是说:
void FindingObjectType(String str)
{
if (Thing.IsLegit(str))
{
Thing thing = new Thing(str);
//process
}
}
这最后一种模式可能是最好的。您希望区分您的疑虑。当你有一个out
参数时,通常是因为该方法试图做太多事情。
答案 2 :(得分:3)
您只需要声明一个对象。以下代码适合您。
void FindingObjectType(String str)
{
Object obj;
if(isValid(str, out obj)
//process
}