0

我一直在尝试编写一个可以扫描原始数据文件并将其规范化以进行数据挖掘过程的程序,我试图从文件中读取数据并将其存储在列表中:

public static List<Normalize> NF()
    {
        //Regex r = new Regex(@"^\d+$");
        List<Normalize> N = new List<Normalize>();
        StreamReader ss = new StreamReader(@"C:\Users\User\Desktop\NN.txt");
        String Line = null;
        while (!ss.EndOfStream) {
            Line = ss.ReadLine();
            var L = Line.Split(',').ToList();
            N.Add(new Normalize { age = Convert.ToInt16(L[0]), 
                                  Sex = L[1], 
                                  T3 = Convert.ToDouble(L[2]),
                                  TT4 = Convert.ToDouble(L[3]),
                                  TFU = Convert.ToDouble(L[4]),
                                  FTI = Convert.ToDouble(L[5]),
                                  RC = L[6],
                                  R = L[7]
            });
        }
        return N;
    }
}
struct Normalize {
   public int age;
   public String Sex;
   public double T3;
   public double TT4;
   public double TFU;
   public double FTI;
   public String RC;
   public String R;
}

此时我想浏览我制作的列表并对数据进行分类,类似于:

   var X= NF();
   for (int i = 0; i < X.Count; i++) {
            if (X[i].age > 0 && X[i].age <= 5) { // Change the X[i].age value to 1 }
            else if (X[i].age > 5 && X[i].age <= 10) { // Change the X[i].age value to 2 }
            ...
        }

但是编译器说 X[i].[variable name] 不是变量,不能以这种方式修改。我的问题是,执行此操作的有效方法是什么。

4

3 回答 3

3

struct Normalize是值类型,而不是引用类型,因此您不能像那样更改其字段。将其更改为class Normalize

于 2013-08-25T19:00:47.420 回答
1

更改并使用 foreach 循环进行迭代struct Normalizeclass Normalize干净多了
您还可以将变量设置为私有并使用 getter/setter 来检查/设置变量。

foreach (Normalize x in X)
{
    if (x.getAge() > 0 && x.getAge() <= 5)
        x.setAge(1)
    ...
}

编辑: 刚刚看到你已经得到了答案

于 2013-08-25T19:00:36.683 回答
1

只要它是单个实体(鉴于它的 a mutable struct),修改 struct 字段就可以了。这个有可能 -

var obj = new Normalize();
obh.Age = 10;

但是在您的情况下,您正在使用列表中的索引器访问结构。

Indexer will return copy of your struct and modifying the value won't reflect it back to the list这不是你想要的。

因此编译器会抛出错误来阻止你写出来。

正如亚历克斯所提到的,如果你想修改它,你应该去创建类而不是结构。

附带说明一下,总是建议使用immutable structs可变结构而不是可变结构。

于 2013-08-25T19:12:23.747 回答