c#如何从列表中显示特定变量?

时间:2017-04-27 12:32:07

标签: c# class methods

所以我正在制作一个模拟网球锦标赛的小程序。 我有一个玩家列表(单独的文件),我打开并放在一个列表中,我在一个类中。然后它在我的Player类中显示为我的ToString方法:

public override string ToString()
    {
        return String.Format("Name: {0} {1} {2}, Birthday: {3}, Age: {4}, From: {5} / {6}",
            first_name,
            middle_name,
            last_name,
            birthday.ToShortDateString(),
            Age,
            nationality_long,
            nationality_short);
    }

我需要模拟网球游戏本身,但我希望它只给我玩家的名字(first_name,middle_name,last_name)并将其设置为:

Console.Clear();

        var player1 = participants.ElementAt(0);
        var player2 = participants.ElementAt(1);
        Console.WriteLine("Match 1: {0} vs. {1}", player1, player2);

        Console.ReadLine();

所以它被显示为,例如:John Touchwich Smith和Sarah Catrine Nielsen。

有没有办法告诉程序,从参与者列表中的不同元素中提供特定变量(first_name,middle_name,last_name),设置它们并将它们放在像上面这样的变量中?

或者我是否必须创建类似的类,打开文件,将名称信息放在ToSting方法中,将该信息放入列表中,然后从该列表中获取?它似乎可以更容易地完成,然后制作更多,几乎相同的类。

3 个答案:

答案 0 :(得分:0)

如果您的participants变量是IEnumerable<Player>,那么您可以使用LINQ Where()方法过滤掉并获得如下所示的特定播放器(过滤条件可以在任何字段上喜欢。可能有一个独特的Id字段)

var player = participants.Where(p => p.first_name == "John").FirstOrDefault();

答案 1 :(得分:0)

首先,您需要一个代表Participant的类。在该类中,您拥有要打印的所有属性。本课程还知道如何打印自己 - 您可以使用现有的ToString - 方法:

class Player
{
    public string First_name { get; set; }
    public string middle_name { get; set; }
    public string Last_name { get; set; }
    public DateTime Birthday { get; set; }
    public int Age { get; set; }
    public string Nationality_long { get; set; }
    public string Nationality_short { get; set; }

    public override string ToString()
    {
        return String.Format("Name: {0} {1} {2}, Birthday: {3}, Age: {4}, From: {5} / {6}",
            first_name,
            middle_name,
            last_name,
            birthday.ToShortDateString(),
            Age,
            nationality_long,
            nationality_short);
    }
}

现在您可以创建该类的实例,例如:

var p1 = new Player { Name = "John", MiddleName = "Touchwich", LastName = "Smith", ... other properties };
var p2 = new Player { ... }

将这些玩家列入参与者名单:

participants.Add(p1);
participants.Add(p2);

现在最后提取该列表中元素的名称,例如这样:

var myPerson = participants.Single(x => x.Name == "John" && 
    x.MiddleName = "Touchwich" &&
    x.LastName = "Smith");
Console.WriteLine(myPerson)

WriteLine的调用现在会隐含地调用你的`ToString``。

答案 2 :(得分:0)

我会在这里做一些假设,因为你没有发布Player类的副本。我将尝试涵盖以下所有可能性。如果您使用简明的具体答案,我会更新答案。

由于您使用ElementAt()进行枚举,因此最好在数据上使用for循环。使用List,您可以执行此操作,给定属性而不是ElementAt()。你也可以使用.ToList()将IEnumerable转换为List(很难知道没有类)。

participants[i].Firstname;

通过选择选择特定属性,例如所有名字。

var specificThings = participants[i].Select(x => new { Firstname = x.Firstname, LastName = x.LastName });

var outputText = participants[i].Select(x => string.Format("Something {0} Something {1} Darkside", x.Firstname, x.Lastname).FirstOrDefault();

这将根据属性为您提供格式化的字符串。

答案还取决于您使用的是IEnumerable还是IEnumerable。如果您使用的是ElementAt并且无法使用,请尝试使用participants.Cast<Player>().ElementAt