C#从类中调用变量并分配给列表

时间:2017-09-20 23:14:30

标签: c# list class

我想知道一种将类中的变量分配给另一个类中的列表的方法。我有以下代码所以

public class Names
{
    public int ID { get; set; }
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
       var playerNames = new List<Names>();
       playerNames = getPlayerList(ref totalPlayers);
       //??
    }
}

totalPlayers是来自另一段代码的用户输入整数。

getPlayerList是代码的一部分,它要求用户输入一些名称,然后使用Name循环将其分配给Names类中的for'。

到目前为止一切正常,我只想知道如何将Name类的Names中的变量分配到Main中的列表。

现在我将所有变量分配给字符串,然后将这些字符串添加到列表中,但最终会产生大量浪费的代码。

string player1 = playerNames[0].Name, player2 = playerNames[1].Name;
// and so on
List<string> players = new List<string>();
players.Add(player1); 
players.Add(player2); // and so on

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ创建列表:

static void Main(string[] args) {
    var players = getPlayerList(ref totalPlayers);
    var playerNames = players.Select(p => p.Name).ToList();
}

否则你会遍历List

static void Main(string[] args) {
    var players = getPlayerList(ref totalPlayers);
    var playerNames = new List<string>();
    foreach (var p in players)
        playerNames.Add(p.Name);
}

答案 1 :(得分:0)

您可以使用循环来遍历列表。

Range("C2:C900").FormulaR1C1 = _
  "=VLOOKUP(RC[-2]&RC[-1],'[Gross.xlsb]dados'!C39:C40,2,0)"

然而,在NetMage已经指出的情况下,使用static void Main( string[] args ) { var playerNames = new List<Names>(); //I assume that getPlayerList() is a function that will populate your list with objects of type Names playerNames = getPlayerList( ref totalPlayers ); //you can iterate through the entire list of objects and retrieve whatever properties you need foreach ( var p in players ) { Console.WriteLine( "Id " + p.Id ); Console.WriteLine( "Name " + p.Name ); } //Or create just a list of names using the Name property on 'Names' var listOfNames = new list<string>(); foreach ( var p in players ) { //and populate using the Name property from each 'Names' item //in your list listOfNames.add( p.Name ); } //This Will print the first index in the list Console.WriteLine( listOfNames[0] ); } 会更加清晰。

更新

当你说

  

getPlayerList是一段代码,它要求用户输入   一些名称,然后分配给“名称”类中的“名称”   使用for循环。

为什么不使用dictionary代替姓名列表呢?看起来您要做的就是将名称linq与唯一身份(string)一起存储。

(int)

然后你只需要遍历字典

Dictionary<int, string> playerNames = new Dictionary<int, string>();
playerNames,add( 0, "John Smith" );
playerNames,add( 1, "Wil Wheaton" );
playerNames,add( 2, "Jon Skeet" );

如果您发现自己拥有大量用户并且您知道他们的确切ID,那么字典将会更快地搜索