C#无法添加到通用列表

时间:2012-03-14 19:59:33

标签: c# console-application

这是另一篇帖子的后续问题,但该帖子已得到解答。我有一个for循环,我想在泛型类中添加三个项目,我不知道该怎么做。如何添加这些项目?

private static void TestResults()
{
    List<Record> Records = new List<Record>();

    for (int i = 0; i < ProxyList.Count; i++)
    {
        string[] split = List[i].Split('|');
        // This is what i dont know how to do
        //  split[0] = Name, split[1] = SomeValue and split[3] = OrderNr
    }
}

class Records
{
    public static string Name { get; set; }
    public static int SomeValue { get; set; }
    public static int OrderNr { get; set; }
}

3 个答案:

答案 0 :(得分:4)

第一步是将字段与Records的实例与类型本身相关联。这是通过删除静态修饰符

来完成的
class Records
{
    public string Name { get; set; }
    public int SomeValue { get; set; }
    public int OrderNr { get; set; }
}

要实际创建实例,请尝试以下

for (int i = 0; i < ProxyList.Count; i++) {
  string[] split = List[i].Split('|');
  Records record = new Records() {
    Name = split[0]
    SomeValue = Int32.Parse(split[1])
    OrderNr = Int32.Parse(split[2])
  };
  Records.add(record);
}

此特定示例使用对象初始值设定项来组合创建对象和设置其字段的行为。这可以扩展为更长的形式如下

for (int i = 0; i < ProxyList.Count; i++) {
  string[] split = List[i].Split('|');
  Records record = new Records();
  record.Name = split[0];
  record.SomeValue = Int32.Parse(split[1]);
  record.OrderNr = Int32.Parse(split[2]);
  Records.add(record);
}

如果原始Int32.Parse中的项目不是数字,string方法将抛出异常。如果这是一种可能性(想想不好的输入)那么你会想要用Records语句包装try / catch的创建

答案 1 :(得分:2)

一方面,您的属性一定不能是静态的。你想为每个实例提供不同的数据,对吧?所以他们需要实例属性。就个人而言,我也会使类型不可变,但这是另一回事:

class Record // Changed from Records; each object is only a single record...
{
    public string Name { get; set; }
    public int SomeValue { get; set; }
    public int OrderNumber { get; set; }
}

private static List<Record> ConvertRecords(IEnumerable<string> lines)
{
    List<Record> records = new List<Record>();

    foreach (string line in lines)
    {
        string[] split = line.Split('|');
        Record record = new Record {
            Name = split[0],
            SomeValue = int.Parse(split[1]),
            OrderNumber = int.Parse(split[2]);
        };
        records.Add(record);
    }
}

从C#3 / .NET 3.5开始,更惯用的方法是使用LINQ:

private static List<Record> ConvertRecords(IEnumerable<string> lines)
{
    return (from line in lines
            let split = line.Split('|')
            select new Record {
                Name = split[0],
                SomeValue = int.Parse(split[1]),
                OrderNumber = int.Parse(split[2]);
            }).ToList();
    }
}
另一方面,如果你真的只是开始学习这门语言,这是相对先进的。

说实话,Stack Overflow更适合询问特定问题而不是结构化学习 - 我建议你掌握一本好书,例如C# 4 in a Nutshell

答案 2 :(得分:1)

我不确定你为什么要使用静电!!!但试试这个:

private static void TestResults()
    {
List<Record> Records = new List<Record>();

for (int i = 0; i < ProxyList.Count; i++)
        {;
            string[] split = List[i].Split('|');
            Records.Add(new Record() {Name = Namesplit[0] , SomeValue = split[1], OrderNr = split[3]}) ;

        }
}