所以我正在制作一个模拟网球锦标赛的小程序。 我有一个玩家列表(单独的文件),我打开并放在一个列表中,我在一个类中。然后它在我的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方法中,将该信息放入列表中,然后从该列表中获取?它似乎可以更容易地完成,然后制作更多,几乎相同的类。
答案 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
。