ฉันจะแปลงรายการเป็นสตริงใน C # ได้อย่างไร
เมื่อฉันดำเนินการtoString
กับวัตถุรายการฉันได้รับ:
System.Collections.Generic.List`1 [System.String]
ฉันจะแปลงรายการเป็นสตริงใน C # ได้อย่างไร
เมื่อฉันดำเนินการtoString
กับวัตถุรายการฉันได้รับ:
System.Collections.Generic.List`1 [System.String]
คำตอบ:
บางทีคุณกำลังพยายามทำ
string combindedString = string.Join( ",", myList.ToArray() );
คุณสามารถแทนที่ "," ด้วยสิ่งที่คุณต้องการแยกองค์ประกอบในรายการโดย
แก้ไข : ดังที่เอ่ยถึงในความคิดเห็นที่คุณสามารถทำได้
string combindedString = string.Join( ",", myList);
อ้างอิง:
Join<T>(String, IEnumerable<T>)
Concatenates the members of a collection, using the specified separator between each member.
ฉันจะไปกับความรู้สึกของฉันและคิดว่าคุณต้องการเชื่อมโยงผลลัพธ์ของการโทรToString
ในแต่ละองค์ประกอบของรายการ
var result = string.Join(",", list.ToArray());
คุณสามารถใช้string.Join
:
List<string> list = new List<string>()
{
"Red",
"Blue",
"Green"
};
string output = string.Join(Environment.NewLine, list.ToArray());
Console.Write(output);
ผลลัพธ์จะเป็น:
Red
Blue
Green
เป็นทางเลือกให้Environment.NewLine
คุณสามารถแทนที่ด้วยสตริงตามเส้นคั่นที่คุณเลือก
หากคุณต้องการบางสิ่งที่ซับซ้อนกว่าการเข้าร่วมแบบง่ายคุณสามารถใช้ LINQ เช่น
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
จะรับ ["A", "B", "C"] และสร้าง "(a) (b) (c)"
String.Join(" ", myList)
String.Join(" ", myList.ToArray())
หรือ อาร์กิวเมนต์แรกคือตัวคั่นระหว่างสตริงย่อย
var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
คุณอาจต้องใช้ ToArray () ในรายการก่อนทั้งนี้ขึ้นอยู่กับรุ่นของ. NET
คุณมีList<string>
- ดังนั้นถ้าคุณต้องการให้ตัดแบ่งพวกเขาบางอย่างเช่น
string s = string.Join("", list);
จะทำงาน (ใน. NET 4.0 อย่างน้อย) พารามิเตอร์แรกคือตัวคั่น ดังนั้นคุณสามารถจุลภาคคั่น ฯลฯ
คุณอาจต้องการดูการใช้ StringBuilder เพื่อดำเนินการเชื่อมโยงกันแทนที่จะสร้างรายการ
.ToString()
วิธีการสำหรับประเภทของการอ้างอิงมักจะหายกลับไปSystem.Object.ToString()
จนกว่าคุณจะแทนที่มันอยู่ในประเภทที่ได้มา (อาจจะใช้วิธีการขยายสำหรับในตัวชนิด) พฤติกรรมเริ่มต้นสำหรับวิธีนี้คือการส่งออกชื่อประเภทที่มันเรียกว่า ดังนั้นสิ่งที่คุณเห็นคือพฤติกรรมที่คาดหวัง
คุณสามารถลองทำบางสิ่งstring.Join(", ", myList.ToArray());
เพื่อให้บรรลุเป้าหมายนี้ มันเป็นขั้นตอนพิเศษ แต่สามารถใส่ในวิธีการขยายSystem.Collections.Generic.List<T>
เพื่อให้ง่ายขึ้นเล็กน้อย บางสิ่งเช่นนี้
public static class GenericListExtensions
{
public static string ToString<T>(this IList<T> list)
{
return string.Join(", ", list);
}
}
(โปรดทราบว่านี่เป็นโค้ดอิสระและยังไม่ผ่านการทดสอบฉันไม่มีคอมไพเลอร์ในขณะนี้ดังนั้นคุณจะต้องทดลองกับมันเล็กน้อย)
มันยากที่จะบอก แต่บางทีคุณกำลังมองหาสิ่งที่ชอบ:
var myString = String.Join(String.Empty, myList.ToArray());
สิ่งนี้จะเรียกเมธอด ToString () ในแต่ละไอเท็มในรายการและต่อเข้าด้วยกัน
String.Concat()
จะบรรลุสิ่งเดียวกันดีกว่า
String.Join("", myList)
หากคุณกำลังมองที่จะเปิดในรายการที่เป็นสายยาวใหญ่ทำเช่นนี้: เฟรมเวิร์กเวอร์ชันเก่าบางรุ่นไม่อนุญาตให้คุณผ่าน IEnumerable เป็นพารามิเตอร์ตัวที่สองดังนั้นคุณอาจจำเป็นต้องแปลงรายการของคุณเป็นอาร์เรย์ด้วยการเรียก. ToArray ()
คำตอบสำหรับคำถามของคุณโดยตรงคือ String.Join
ตามที่คนอื่นพูดถึง
อย่างไรก็ตามหากคุณต้องการกิจวัตรคุณสามารถใช้Aggregate
:
List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");
string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();
วิธีนี้ช่วยฉันเมื่อพยายามดึงข้อมูลจาก Text File และเก็บไว้ใน Array จากนั้นกำหนดให้เป็นสตริงที่มีให้เลือกมากมาย
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
หวังว่าจะช่วยให้ใครซักคน !!!!
ดูเหมือนว่าจะใช้งานได้สำหรับฉัน
var combindedString = new string(list.ToArray());
คำตอบทั้งหมดข้างต้นใช้ไม่ได้กับรายการที่ซ้อนกัน