繁体   English   中英

如何仅将 class 的值插入另一个列表 class C#?

[英]How to Insert only values of a class into another list class C#?

您定义 class 的图像如下;

public class Liste
{
    public int valueInt { get; set; }
    public List<string> valueString = new List<string>();
}

我定义了一个变量,它也是一个列表;

  public List <Liste> oray2 = new List <Liste>();
  public Liste oray3 = new Liste();

我想手动为oray2列表添加价值,

        oray3.valueInt = 10;
        oray3.valueString.Add("Text1");
        oray3.valueString.Add("Text2");
        oray3.valueString.Add("Text3");

        oray2.Add(oray3);

        oray3.valueString.Remove("Text2");

这也会影响 oray2 列表。 所以它看起来

oray2.Add(oray3);

没有向oray2 class 添加值,但oray2 [0] 似乎与oray3 class 相关联。

那么在oray3和oray2 [0]之间没有链接的情况下,将oray3的值添加到oray2的最佳和有效方法是什么,因此导致oray3的更改不会影响oray2列表值?

我最好的解决方案;

oray3=null;

或者

oray3=new Liste();

像魅力一样工作。

我看到两个选择:将oray3设置为newListe object 并设置其属性而不是重新使用引用,或者将oray3复制到新的Liste object 并将其添加列表中。

目前尚不清楚为什么您首先要重用oray3以了解其中哪个更好。

只需使Liste成为struct而不是class

public struct Lex
{
    public Lex() 
    { 

    }

    public int valueInt { get; set; } = 0;
    public List<string> valueString = new List<string>();
}

C# 中的类是引用类型,因此按引用传递,而结构是值类型,因此按值传递。

引用类型传递对已声明变量的引用,因此当它们被分配给另一个变量并发生更改时,两个变量都会更新。

值类型在赋值时简单地复制它们的值,因此更改只发生在进行更改的变量上。

此处有关值类型和引用类型的更多信息: https://www.tutorialsteacher.com/csharp/csharp-value-type-and-reference-type

我认为这就是你想要做的。 这样每次调用GetOray3()时都会创建一个新的oray3 object 。

List<Liste> oray2 = new List<Liste>();

oray2.Add(GetOray3());
oray2.Add(GetOray3());
oray2.Add(GetOray3());

static Liste GetOray3()
{
    Liste oray3 = new Liste();

    oray3.valueInt = 10;
    oray3.valueString.Add("Text1");
    oray3.valueString.Add("Text2");
    oray3.valueString.Add("Text3");

    return oray3;
}

public class Liste
{
    public int valueInt { get; set; }
    public List<string> valueString = new List<string>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM