[英]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
設置為new
的Liste
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.