0

嘿,我有代码:

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

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

    }

我试图做的是从我输入名称并返回具有给定名称的第一张卡的 Main() 中调用它。我已经尝试了很多年,你们能帮忙吗?

因此,如果我输入“迈克”,它将显示他的信息,我已经设置了列表,它只是从主目录调用它

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

有什么阻止你像普通人一样称呼它吗?

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

于 2012-08-23T03:32:06.370 回答
2

建议使用 Main 中的 Linq 而不是单独的方法

Cust.FistOrDefault(x => x.Name == Name)
于 2012-08-23T03:35:51.190 回答
0

该错误可能在您的代码中的其他位置。根据您的评论,我认为您正在阅读来自控制台的输入。如果是这种情况,它可能会在字符串末尾添加一个额外的换行符。

您可以使用调试器来检查这一点,但最有可能的解决方案是修剪输入。

例如,您可以将 if 语句更改为:

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

尽管这可能会解决问题,但它仍然不是很健壮。用户可以输入“Mike”或“MIKE”的任何变体并期待结果。因此,您也应该考虑进行不区分大小写的比较。

if(string.Equals(cust.Name, Name.Trim(), StringComparison.CurrentCultureIgnoreCase))
于 2012-08-23T04:47:29.987 回答
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 回答