当前位置:  开发笔记 > 编程语言 > 正文

添加到列表会覆盖C#中的先前对象值

如何解决《添加到列表会覆盖C#中的先前对象值》经验,为你挑选了1个好方法。

虽然Stackoverflow上有几个关于这类问题的帖子,但是我已经查看了它们并且没有找到解决我的问题的方法.

在代码中,我将浏览一个带有foreach循环的列表列表,并将创建的元素添加到另一个列表中.虽然在foreach循环中每次迭代都给出一个唯一值,但在它之外的值是相同的.

try
{
    List takeoffs = new List();

    List> itemTable = queryTable("TK_ITEM", 52);

    foreach (List row in itemTable)
    {
        // Second element in the constructor is Name.
        Takeoff takeoff = new Takeoff(row.ElementAt(0), row.ElementAt(3), row.ElementAt(11), 
            row.ElementAt(17), row.ElementAt(25), row.ElementAt(33), 
            row.ElementAt(37), row.ElementAt(45));

        MessageBox.Show(row.ElementAt(3)); // Each iteration gives an unique value.

        takeoffs.Add(takeoff);
    }

    // Values of both objects are the same.
    MessageBox.Show(takeoffs[0].Name);
    MessageBox.Show(takeoffs[1].Name);

    return takeoffs;
}
catch (Exception)
{
    MessageBox.Show("No material takeoff created!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

    return null;
}

我已经尝试了各种添加和显示值的方法,但到目前为止我还没有找到可行的解决方案.

任何人都可以向我指出问题所在吗?

编辑:起飞声明

/*...*/
private static string name;
/*...*/

public Takeoff(string id, string name, string guid, string width, string height, string area, string volume, string count)
{
    /*...*/
    Name = name;
    /*...*/
}

/*...*/

public string Name
{
    get { return name; }
    set { name = value; }
}

/*...*/

CodeCaster.. 8

您的name支持字段是静态的:

private static string name;

不要那样做.只需删除static修饰符,就没有必要了.

静态成员属于该类型,而不是实例.这意味着所有Takeoff共享实例的值相同name,最后分配的值.



1> CodeCaster..:

您的name支持字段是静态的:

private static string name;

不要那样做.只需删除static修饰符,就没有必要了.

静态成员属于该类型,而不是实例.这意味着所有Takeoff共享实例的值相同name,最后分配的值.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有