c# - 自定义类列表

标签 c#

您好,我有一个关于如何列出的问题。

我正在尝试定义一个列表

List<periodrecord> pl=new List<periodrecord>(4);

然后我希望通过 for 循环将项目添加到列表中

当我这样做时:

for (i = 1; i < 100; i++)
        {
            try
            {
                periodrecord pr = new periodrecord();

                /*some random lines*/

                pl.Add(pr);


            }
            catch (Exception e)
            {  break; }
        }

我的问题是:每次循环声明的pr的地址都会被list存储。但是由于pr变量本身不再被程序使用,这些位置是否会被认为是空的并且以某种方式被覆盖?谢谢。

看了答案,还是有些疑惑,我的完整代码如下:

   List<periodrecord> pl=new List<periodrecord>(4);
   for (i = 1; i < 100; i++)
        {
            try
            {
                periodrecord pr = new periodrecord();
                record2 = sr.ReadLine();

                SNorPartCode = record1.Split('&')[0];
                phototype = int.Parse(record1.Split('&')[1]);
                System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
                time = record1.Split('&')[2];
                pr.start = DateTime.Parse(time,provider);
                pr.SNorPartCode = SNorPartCode;
                pr.phototype = phototype;
                if (record2 != null)
                {
                    pr.end = DateTime.Parse(record2.Split('&')[2], provider);
                }
                else
                {
                    pr.end = DateTime.MaxValue;

                }
                pl.Add(pr);
                record1 = record2;

            }
            catch (Exception e)
            {  break; }
        }   

当我接电话时: periodrecord pr = new periodrecord();

从 for 循环中,行

pr.start=...
pr.end=....

改变了列表中的所有项目。

最佳答案

The address of pr declared in each loop will be stored by the list.

不,不会。 pr 变量在调用 Add 时的 将存储在列表中。该值是一个引用 - 对您创建的新对象的引用。

了解 C# 中变量的值绝不是一个对象很重要。它始终是值类型值或引用。一旦您了解了这一点 - 并开始非常清楚变量、它们的值、引用和对象之间的差异 - 很多事情(参数传递、赋值、垃圾收集等)就会变得更加清晰。

例如,考虑:

Button x = new Button();
Button y = x;

这里只有一个对象 - 第一行创建的Button。有两个变量(xy),在第二行之后它们都具有相同的值(对该对象的引用),因为分配。它们仍然是自变量(将新值分配给 x 不会更改 y)。考虑如何将其应用于您的示例 - 您正在调用 pl.Add(pr),它只是将 prvalue 传递给添加 方法。此后,就列表而言,pr 变量完全不相关。所以你可以:

pl.Add(pr);
pr = null;

第二行根本不会影响列表。

关于c# - 自定义类列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009838/

相关文章:

c# - 读入 HTML 文件并替换为变量

c# - 如何将JSON字符串映射到C#方法的调用

c# - Windows Phone 7 : How to parse Bezier Path string like in XAML?

c# - 如何调整颜色的亮度?

c# - 如何用 "and"替换最后一个逗号

c# - 通过继承判断两个 MethodInfo 实例是否代表同一个(非虚)方法

c# - 通过密码学生成唯一编号

c# - 为什么 Razor 解析器提示标记处于打开状态?

c# - DDD : Entity identity before being persisted

c# - 公共(public)交通临时队列