0

ちょっと私はコードを持っています:

   public static CreditCard FindCard(List<CreditCard> Cust, string Name) 

    {
       foreach(CreditCard cust in Cust)
       {
           if(cust.Name == Name)
           {
               return cust;
           }
       }
       return null;

    }

私がやろうとしているのは、名前を入力して指定された名前の最初のカードを返す Main() から呼び出すことです。私は何年もの間試してきましたが、皆さんは助けることができますか?

したがって、「Mike」と入力すると、彼の情報が表示されます。リストはすでにセットアップされており、メインから呼び出すだけです

4

5 に答える 5

3

あなたは次のようなものを探していると思います

class MyClass
{

 public static CreditCard FindCard(List<CreditCard> Cust, string Name) 

    {
       foreach(CreditCard cust in Cust)
       {
           if(cust.Name == Name)
           {
               return cust;
           }
       }
       return null;

    }

public static int main()
{
// Populate the list
List<CreditCard> cards = new List<CreditCard>{ new CreditCard(...), new CreditCard(...)}

Console.WriteLine("Enter your name: ");
String name = Console.ReadLine();

CreditCard cc = FindCard(cards, name);

if (cc != null)
{
    Console.WriteLine(cc.Number); // And for all fields in CreditCard class
    ...
}    
Console.ReadKey();

return 0;
}
于 2012-08-23T04:29:56.153 に答える
2

別の方法ではなく、MainのLinqを使用することをお勧めします

Cust.FistOrDefault(x => x.Name == Name)
于 2012-08-23T03:35:51.190 に答える
2

通常のように呼び出すことを妨げるものはありますか?

CreditCard mikecard = FindCard(myList, "Mike");

于 2012-08-23T03:32:06.370 に答える
0

あなたのコードは正しいですが、拡張メソッドとしてそれを作ることもできます

public static EM
{
    public static CreditCard FindCard(this List<CreditCard> Cust, string Name)
    {
       foreach(CreditCard cust in Cust)
       {
           if(cust.Name == Name)
           {
               return cust;
           }
       }
       return null;
    }
}

そしてそれを次のように呼びます

CreditCard cc = yourList.FindCard("Mike");
于 2012-08-23T03:37:50.940 に答える
0

バグがコードの別の場所にある可能性があります。あなたのコメントに基づいて、コンソールからの入力を読んでいると思います。その場合は、文字列の末尾に余分な改行文字を追加している可能性があります。

デバッガーを使用してこれを確認できますが、ほとんどの場合、解決策は入力をトリミングすることです。

たとえば、if ステートメントを次のように変更できます。

if(cust.Name == Name.Trim())

これで問題は解決するかもしれませんが、まだそれほど堅牢ではありません。ユーザーは、「Mike」または「MIKE」の任意のバリエーションを入力して、結果を期待できます。そのため、大文字と小文字を区別しない比較も検討する必要があります。

if(string.Equals(cust.Name, Name.Trim(), StringComparison.CurrentCultureIgnoreCase))
于 2012-08-23T04:47:29.987 に答える