แปลงรายการเป็นสตริงใน C #


184

ฉันจะแปลงรายการเป็นสตริงใน C # ได้อย่างไร

เมื่อฉันดำเนินการtoStringกับวัตถุรายการฉันได้รับ:

System.Collections.Generic.List`1 [System.String]


1
List คือชุดสะสมสตริงนี้ควรมีลักษณะอย่างไร
Marko

คุณสามารถลองใด ๆ ของสามวิธีที่กล่าวถึงที่นี่
RBT

คำตอบ:


365

บางทีคุณกำลังพยายามทำ

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.

4
คุณหมายถึง string combindedString = string.Join (",", myList.ToArray ());
เลื่อย

2
อาร์กิวเมนต์ '2': ไม่สามารถแปลงจาก 'System.Collections.Generic.List <string>' เป็น 'string []'
Ash

9
ฉันใช้สิ่งนี้เมื่อเร็ว ๆ นี้มันได้ผล - เพียงแค่ตัด. ToArray ()
Adrian K

3
@AdrianK คุณถูกต้องเนื่องจาก. Net 4.0 ได้เพิ่มความสามารถในการส่งผ่านใน <string> IEnumerable อย่างไรก็ตาม 4.0 เปิดตัวในเดือนเมษายน 2010 ก่อนที่คำถามและคำตอบนี้จะถูกโพสต์ดังนั้นผู้คนที่นี่ก็ยังไม่ทราบ (นอกเหนือจากด้านล่าง)
Andrew Steitz

สำหรับ vb.net, Dim combindedString As String = String.Join (",", myList.ToArray ())
PartTimeNerd

55

ฉันจะไปกับความรู้สึกของฉันและคิดว่าคุณต้องการเชื่อมโยงผลลัพธ์ของการโทรToStringในแต่ละองค์ประกอบของรายการ

var result = string.Join(",", list.ToArray());

16

คุณสามารถใช้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คุณสามารถแทนที่ด้วยสตริงตามเส้นคั่นที่คุณเลือก


14

หากคุณต้องการบางสิ่งที่ซับซ้อนกว่าการเข้าร่วมแบบง่ายคุณสามารถใช้ LINQ เช่น

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

จะรับ ["A", "B", "C"] และสร้าง "(a) (b) (c)"


1
ใช้การรวมกับเมล็ดเป็นพารามิเตอร์แรกเพื่อหลีกเลี่ยงการโยน InvalidOperationException สำหรับคอลเลกชันที่ว่างเปล่า
Huacanacha

13

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


9

คุณมีList<string>- ดังนั้นถ้าคุณต้องการให้ตัดแบ่งพวกเขาบางอย่างเช่น

string s = string.Join("", list);

จะทำงาน (ใน. NET 4.0 อย่างน้อย) พารามิเตอร์แรกคือตัวคั่น ดังนั้นคุณสามารถจุลภาคคั่น ฯลฯ

คุณอาจต้องการดูการใช้ StringBuilder เพื่อดำเนินการเชื่อมโยงกันแทนที่จะสร้างรายการ


8

.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);
    }
}

(โปรดทราบว่านี่เป็นโค้ดอิสระและยังไม่ผ่านการทดสอบฉันไม่มีคอมไพเลอร์ในขณะนี้ดังนั้นคุณจะต้องทดลองกับมันเล็กน้อย)


มันจะทำงานเมื่อฉันเรียกมันว่าไม่ ToString หรือรันด้วยพารามิเตอร์ทั่วไป แต่ผมชอบความคิดของคุณโดยใช้วิธีขยาย :)
IAdapter

4

มันยากที่จะบอก แต่บางทีคุณกำลังมองหาสิ่งที่ชอบ:

var myString = String.Join(String.Empty, myList.ToArray());

สิ่งนี้จะเรียกเมธอด ToString () ในแต่ละไอเท็มในรายการและต่อเข้าด้วยกัน


1
String.Concat()จะบรรลุสิ่งเดียวกันดีกว่า
Jeff Mercado


2

String.Join("", myList)หากคุณกำลังมองที่จะเปิดในรายการที่เป็นสายยาวใหญ่ทำเช่นนี้: เฟรมเวิร์กเวอร์ชันเก่าบางรุ่นไม่อนุญาตให้คุณผ่าน IEnumerable เป็นพารามิเตอร์ตัวที่สองดังนั้นคุณอาจจำเป็นต้องแปลงรายการของคุณเป็นอาร์เรย์ด้วยการเรียก. ToArray ()


2

คำตอบสำหรับคำถามของคุณโดยตรงคือ 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();

1
ในรหัสการผลิตให้แน่ใจว่ารายการของคุณมีองค์ประกอบใด ๆ มิฉะนั้นมันจะผิด
AZ_

1

วิธีนี้ช่วยฉันเมื่อพยายามดึงข้อมูลจาก Text File และเก็บไว้ใน Array จากนั้นกำหนดให้เป็นสตริงที่มีให้เลือกมากมาย

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

หวังว่าจะช่วยให้ใครซักคน !!!!



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.