5

我有一种方法可以检查对象相对于我的程序的有效性(某些算法)。该对象是从传入的字符串创建(解析)的。

逻辑是:

 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
}

所以不是?????,我不知道如何传递对象。

我只有 1 个构造函数,对象(字符串)。

4

3 回答 3

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
}
于 2013-05-03T18:30:16.243 回答
7

正如 nic 所说,通常你会说:

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参数时,通常是因为该方法试图做太多的事情

于 2013-05-03T18:38:33.183 回答
3

你只需要声明一个对象。下面的代码将为您工作。

void FindingObjectType(String str)
{
        Object obj;
        if(isValid(str, out obj)
             //process
}
于 2013-05-03T18:31:38.007 回答