0

2つのパラメーターがオブジェクトであるメソッドを呼び出したい(1つはPersonを取得し、もう1つは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
    }
}
4

2 に答える 2

1

retrievePerson最後にもう一度呼び出しているので、無限の再帰を作成しました。

のreturnステートメントを次のように変更する必要がありますretrievePerson

return new[] {findedPerson, myTableCreatedPerson};
于 2012-07-24T10:50:57.697 に答える
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} 
}

これは機能するはずですが、これをテストする必要があります。

ただし、コードを修正し、操作ごとに異なる関数を使用することも強くお勧めします。動作が異なる同じ関数を二重に呼び出さないでください。数か月後、コードがますます複雑になると、完全な混乱に飛び込むことになります。

お役に立てれば。

于 2012-07-24T10:50:12.260 に答える