调用具有两个对象的方法并存储在对象数组中

时间:2012-07-24 10:41:44

标签: c#

我想调用一个方法,其中两个参数是对象(一个检索Person,一个添加Person)。然后存储在Person对象的数组中,然后我可以单独使用这两个对象。

方法:
我创建对象Person并在其中存储数据,从firstName为“Mediterranean”的数据库中检索数据 并添加其他行(人物功能),并希望将其传回。 但是不会返回对象并且直接失败。

有人可以帮帮我吗?

我有这样的事情:

public Person [] retrievePerson(Person somePerson, Person addRowPerson)
{ 
    .......
    findedPerson = new Person(title, firstName, secondName, city, nationality, letter);
    myTableCreatedPerson = new Person(title, firstName, secondName, city, nationality, letter);
    return retrievePerson(findedPerson, myTableCreatedPerson);
}

//and calling function in different class like that
public void retrievePersonTest() //Create Person in DB directly then Retrieve Person and compare retrieve features with create features then directly delete him from DB
{               
    Person expected = null;
    Person actual = null;
    Person addRowPerson = null;
    Person [] twoPersonArray;
    DBConnect target = new DBConnect();

    try //retrieve Person
    {                    
        twoPersonArray =  target.retrievePerson(expected, addRowPerson); //do not return                  
        twoPersonArray = (Func<Person, Person>)target.retrievePerson(expected, addRowPerson).CreateDelegate(typeof(Func<Person, Person>)); //do not return either
    }
}

2 个答案:

答案 0 :(得分:1)

你创建了一个无休止的递归,因为在retrievePerson结束时你再次调用它。

您需要将retrievePerson的return语句更改为:

return new[] {findedPerson, myTableCreatedPerson};

答案 1 :(得分:0)

不清楚为什么你传递参数,如果你在函数之后没有使用它,但假设这是一个错误

public Person [] retrievePerson(Person somePerson = null, Person addRowPerson = null)
{ 
     bool nullpassed = false;

       if(somePerson  == null) {
          nullpassed  = true;
          somePerson  = new Person(title, firstName, secondName, city, nationality, letter);
       }

       if(addRowPerson == null) {
          nullpassed = true;
          addRowPerson = new Person(title, firstName, secondName, city, nationality, letter);
       }

       if(nullpassed)    
           return retrievePerson(somePerson  , addRowPerson );
       else 
           return new Person[] {somePerson  , addRowPerson} 
}

应该有效,但您需要对此进行测试。

但我也强烈建议修改您的代码,并为您所做的每项操作使用不同的函数。不要对行为的相同功能进行双重调用。几个月后,当代码变得越来越复杂时,你将陷入完全混乱。

希望这有帮助。