簡體   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