มีวิธีง่ายๆในการส่งคืนสตริงที่ทำซ้ำ X จำนวนครั้งหรือไม่?


318

ฉันพยายามแทรกการเยื้องจำนวนหนึ่งก่อนที่สตริงจะขึ้นอยู่กับความลึกของรายการและฉันสงสัยว่าถ้ามีวิธีที่จะส่งคืนสตริงซ้ำ X ครั้ง ตัวอย่าง:

string indent = "---";
Console.WriteLine(indent.Repeat(0)); //would print nothing.
Console.WriteLine(indent.Repeat(1)); //would print "---".
Console.WriteLine(indent.Repeat(2)); //would print "------".
Console.WriteLine(indent.Repeat(3)); //would print "---------".

9
ไม่แน่ใจว่าสิ่งนี้ใช้ได้หรือไม่ แต่คุณอาจต้องการดูIndentedTextWriterเช่นกัน
Chris Shouts

คุณต้องการพิจารณาการเปลี่ยนคำตอบที่ยอมรับเนื่องจากคำถามของคุณเกี่ยวกับการทำซ้ำสตริงและไม่ใช่อักขระที่คำตอบที่ยอมรับแสดงให้เห็นหรือไม่ จนถึงวันนี้จนถึง. Net v4.7, ตัวสร้างStringคลาสที่มากเกินไปไม่ได้ใช้สตริงเป็นพารามิเตอร์ในการสร้างการซ้ำซ้อนซึ่งอาจทำให้คำตอบที่ได้รับการยอมรับเป็นไปอย่างสมบูรณ์แบบ
RBT

คำตอบ:


538

ถ้าคุณตั้งใจที่จะทำซ้ำตัวละครเดียวกับที่คุณสามารถใช้ตัวสร้างสตริงnew String(char c, int count)ที่ยอมรับถ่านและจำนวนครั้งที่จะทำซ้ำได้

ตัวอย่างเช่นเมื่อต้องการทำเครื่องหมายขีดซ้ำห้าครั้ง:

string result = new String('-', 5);
Output: -----

7
ขอบคุณที่เตือนฉันเกี่ยวกับคุณสมบัติเล็ก ๆ น้อย ๆ ที่ดีนี้ ฉันคิดว่ามันหายไปในมุมของใจของฉัน
Chris Shouts

3
เนื่องจากแท็บ metacharacter '\ t' เป็นอักขระนี้ใช้สำหรับการเยื้องเช่นกัน
cori

91
นี่เป็นเคล็ดลับที่มีประโยชน์มากของ C # แต่ชื่อของคำถามนั้นถามถึงสตริง (ไม่ใช่ตัวอักษร) คำตอบอื่น ๆ ด้านล่างคำตอบนี้ตอบคำถามได้จริง แต่ได้คะแนนต่ำกว่ามาก ฉันไม่ได้พยายามดูหมิ่นคำตอบของ Ahmad แต่ฉันคิดว่าควรเปลี่ยนชื่อของคำถามนี้ (ถ้าคำถามเกี่ยวกับตัวละคร) หรือคำตอบอื่น ๆ ควรจะถูกยกระดับขึ้น (ไม่ใช่คำถามนี้)
pghprogrammer4

14
@Ahmad ที่ผมกล่าวว่าผมไม่ได้ downvote เพราะผมไม่คิดว่าคุณให้ข้อมูลดี แต่เพราะข้อมูลที่คุณให้ไม่ได้เกี่ยวข้องกับการตอบคำถามตามที่ระบุไว้ในปัจจุบัน ลองนึกภาพว่าคุณกำลังค้นหาวิธีการทำซ้ำสตริง (ไม่ใช่ตัวอักษร) และเมื่อคุณได้รับคำถามที่เกี่ยวข้องคุณจะต้องเลื่อนดูเคล็ดลับที่มีประโยชน์เพื่อรับคำตอบที่แท้จริงของคำถาม หากการลงคะแนนผิดต่อคุณฉันสามารถลบได้ แต่คุณเห็นว่าฉันมาจากไหน ฉันอยู่นอกฐานทั้งหมดหรือไม่
pghprogrammer4

11
@ pghprogrammer4 IMHO ผู้ลงคะแนนต่ำสามารถท้อใจได้และควรใช้สำหรับคำตอบที่เป็นอันตราย / ทำให้เข้าใจผิด / real_bad ที่ต้องการการเปลี่ยนแปลงครั้งใหญ่หรือควรถูกลบโดยผู้แต่ง คำตอบมีอยู่เพราะผู้คนมีน้ำใจและต้องการแบ่งปันสิ่งที่รู้ โดยทั่วไปแล้วเว็บไซต์เหล่านี้สนับสนุนให้ upvotes เพื่อนำคำตอบที่มีประโยชน์มาสู่ด้านบน
ToolmakerSteve

271

หากคุณกำลังใช้ .NET 4.0 คุณสามารถใช้ร่วมกับstring.ConcatEnumerable.Repeat

int N = 5; // or whatever
Console.WriteLine(string.Concat(Enumerable.Repeat(indent, N)));

มิฉะนั้นฉันไปกับสิ่งที่ต้องการคำตอบของอดัม

เหตุผลที่ฉันมักจะไม่แนะนำให้ใช้คำตอบของ Andreyก็เพียงว่าการToArray()โทรแนะนำค่าใช้จ่ายฟุ่มเฟือยที่หลีกเลี่ยงกับStringBuilderวิธีการที่แนะนำโดยอดัม อย่างน้อยก็ทำงานได้โดยไม่ต้องใช้. NET 4.0 และรวดเร็วและง่ายดาย (และจะไม่ฆ่าคุณหากประสิทธิภาพไม่ได้เป็นเรื่องที่น่ากังวลมากเกินไป)


3
สิ่งนี้จะทำงานได้ดีกับสตริงเช่นถ้าคุณต้องการเชื่อมต่อช่องว่างที่ไม่แตกหัก (& nbsp;) แต่ผมถือว่าตัวสร้างสตริงจะเร็วที่สุดถ้าคุณกำลังติดต่อกับถ่าน ...
woodbase

1
ตัวสร้างสตริงจะทำงานเฉพาะหนึ่งอักขระเท่านั้น ถึงตัวเลือกในการใช้การทำซ้ำของ Concat จะทำงานกับสตริง
Eli Dagan

4
ขอบคุณสำหรับการตอบคำถามชื่อจริง!
Mark K Cowan

ฉันชอบคำตอบนี้!
Ji_in_coding

หากคุณได้รับ -System.Linq.Enumerable เป็นต้นเป็นผลลัพธ์นั่นเป็นเพราะคุณ (ตกลงนี่คือฉัน) นั้นเร็วเกินไปที่จะคัดลอก / วางและแก้ไขตัวอย่างข้อมูล หากคุณต้องการต่อสตริงที่แตกต่างกันไปยังเอาท์พุตของ Enumerable ทำซ้ำคุณต้องทำเช่นนี้: Console.WriteLine(string.Concat("-", string.Concat(Enumerable.Repeat(indent, N))));
Gabe

47
public static class StringExtensions
{
    public static string Repeat(this string input, int count)
    {
        if (!string.IsNullOrEmpty(input))
        {
            StringBuilder builder = new StringBuilder(input.Length * count);

            for(int i = 0; i < count; i++) builder.Append(input);

            return builder.ToString();
        }

        return string.Empty;
    }
}

6
อาจจะผ่านinput.Length * countไปยังผู้StringBuilderสร้างคุณไม่คิดเหรอ?
ด่านเต่า

และถ้าคุณผ่านinput.Length * countไปยังผู้StringBuilderสร้างคุณสามารถข้ามStringBuilderไปเลยและสร้าง char [] ที่มีขนาดที่เหมาะสมได้ทันที
dtb

@dtb: ฉันสงสัยว่าทำไมคุณต้องการทำเช่นนั้น ฉันไม่สามารถจินตนาการได้ว่ามันจะเร็วกว่าการใช้ a มาก (ถ้ามี) StringBuilderและโค้ดจะโปร่งใสน้อยกว่า
Adam Robinson

@dtb: yuck ใช้ StringBuilder มันถูกออกแบบมาเพื่อทำสิ่งนี้อย่างมีประสิทธิภาพ
ToolmakerSteve

อดัมฉันเห็นคุณไปที่ปัญหาของการทดสอบอินพุตสำหรับ null เมื่อเพิ่มเข้าไปนับ แต่จากนั้นอนุญาตให้มันล้มโดยพึ่งพาผนวกเพื่อไม่ทำสิ่งใดเลยที่ให้ null IMHO นี่น้อยกว่าที่เห็นได้ชัด: ถ้า Null เป็นอินพุตที่เป็นไปได้ทำไมไม่ลองทดสอบดูก่อนแล้วส่งคืนสตริงว่างเปล่า?
ToolmakerSteve

46

วิธีแก้ปัญหาส่วนใหญ่สำหรับสตริง

string result = new StringBuilder().Insert(0, "---", 5).ToString();

1
แน่นอนว่าเป็นซับในที่สวย แน่นอนว่าไม่ใช่นักแสดงที่เก่งที่สุด StringBuilder มีค่าใช้จ่ายเล็กน้อยในการเรียงต่อกันจำนวนน้อยมาก
Teejay

25

สำหรับหลาย ๆ สถานการณ์นี่อาจเป็นทางออกที่ดีที่สุด:

public static class StringExtensions
{
    public static string Repeat(this string s, int n)
        => new StringBuilder(s.Length * n).Insert(0, s, n).ToString();
}

การใช้งานคือ:

text = "Hello World! ".Repeat(5);

นี่เป็นการสร้างคำตอบอื่น ๆ (โดยเฉพาะ @ c0rd's) เช่นเดียวกับความเรียบง่าย แต่ก็มีคุณสมบัติดังต่อไปนี้ซึ่งไม่ใช่เทคนิคอื่น ๆ ทั้งหมดที่กล่าวถึงแบ่งปัน:

  • การทำซ้ำสตริงที่มีความยาวไม่ได้เป็นเพียงตัวอักษร (ตามที่ร้องขอโดย OP)
  • การใช้ที่มีประสิทธิภาพของการStringBuilderจัดสรรล่วงหน้าผ่านการจัดเก็บข้อมูล

ฉันเห็นด้วยนี่เป็นสิ่งที่ยอดเยี่ยม ฉันเพิ่งเพิ่มรหัสนี้กับเครดิตของฉันไปที่ Bob! ขอบคุณ!
John Burley

22

ใช้String.PadLeftหากสตริงที่คุณต้องการมีเพียงอักขระเดียว

public static string Indent(int count, char pad)
{
    return String.Empty.PadLeft(count, pad);
}

เครดิตที่นี่


1
จูบ. เราต้องการอะไรกับ StringBuilders และส่วนขยายสำหรับ นี่เป็นปัญหาที่ง่ายมาก
DOK

1
ฉันไม่รู้นี่ดูเหมือนว่าจะแก้ปัญหาได้ด้วยถ้อยคำที่มีความสง่างาม และ btw คุณเรียกใครว่า 'S' :-)
Steve Townsend

7
แต่ไม่ได้เป็นนี้จริงๆเพียงรุ่นที่เห็นได้ชัดน้อยสร้างที่ต้องใช้เวลาและ ? stringcharint
ด่านเต่า

มันจะดูดีขึ้นด้วย String แทนที่จะเป็น "" ... ไม่เช่นนั้นวิธีแก้ปัญหาที่ดี;)
Thomas Levesque

@Steve BTW String.PadLeftข้อโต้แย้งจะกลับรายการ countมาก่อนที่ตัวละครของช่องว่างภายใน
Ahmad Mageed

17

คุณสามารถทำซ้ำสตริงของคุณ (ในกรณีที่ไม่ใช่อักขระตัวเดียว) และต่อผลลัพธ์เช่นนี้:

String.Concat(Enumerable.Repeat("---", 5))

12

ฉันจะไปหาคำตอบของ Dan Tao แต่ถ้าคุณไม่ได้ใช้. NET 4.0 คุณสามารถทำสิ่งนั้นได้:

public static string Repeat(this string str, int count)
{
    return Enumerable.Repeat(str, count)
                     .Aggregate(
                        new StringBuilder(),
                        (sb, s) => sb.Append(s))
                     .ToString();
}

3
ถ้าฉันจะหาตัวอย่างในโครงการของฉันฉันจะสงสัยว่าใครกำลังละเมิด KISS และทำไม ... เป็นอย่างอื่นดี
Noctis

4
        string indent = "---";
        string n = string.Concat(Enumerable.Repeat(indent, 1).ToArray());
        string n = string.Concat(Enumerable.Repeat(indent, 2).ToArray());
        string n = string.Concat(Enumerable.Repeat(indent, 3).ToArray());

1
@ อดัม: ฉันเดาว่าคุณต้องทำสิ่งนั้นก่อน NET 4.0
ด่านเต่า

3

ฉันชอบคำตอบที่ได้รับ ตามแนวของ sames แต่เป็นสิ่งที่ฉันเคยใช้ในอดีต:

"" .PadLeft (3 * เยื้อง, '-')

สิ่งนี้จะทำให้การสร้างย่อหน้าเสร็จสมบูรณ์ แต่ในทางเทคนิคแล้วคำถามก็คือการทำซ้ำสตริง หากการเยื้องสตริงเป็นสิ่งที่ต้องการ> - <ดังนั้นสิ่งนี้รวมถึงคำตอบที่ยอมรับจะไม่ทำงาน ในกรณีนี้การแก้ปัญหาของ c0rd โดยใช้ stringbuilder ดูดี แต่ค่าโสหุ้ยของ stringbuilder ในความเป็นจริงอาจไม่ทำให้มันมีประสิทธิภาพมากที่สุด ทางเลือกหนึ่งคือการสร้างอาร์เรย์ของสตริงเติมด้วยสตริงการเยื้องแล้วเชื่อมต่อ เป็นสีขาว:

int Indent = 2;

string[] sarray = new string[6];  //assuming max of 6 levels of indent, 0 based

for (int iter = 0; iter < 6; iter++)
{
    //using c0rd's stringbuilder concept, insert ABC as the indent characters to demonstrate any string can be used
    sarray[iter] = new StringBuilder().Insert(0, "ABC", iter).ToString();
}

Console.WriteLine(sarray[Indent] +"blah");  //now pretend to output some indented line

เราทุกคนชอบทางออกที่ฉลาด แต่บางครั้งก็ง่ายที่สุด


3

การเพิ่มวิธีการขยายที่ฉันใช้ทั่วทั้งโครงการของฉัน:

public static string Repeat(this string text, int count)
{
    if (!String.IsNullOrEmpty(text))
    {
        return String.Concat(Enumerable.Repeat(text, count));
    }
    return "";
}

หวังว่าใครบางคนสามารถใช้ประโยชน์จากมัน ...


2

แปลกใจที่ไม่มีใครไปโรงเรียนเก่า ฉันไม่ได้อ้างสิทธิ์ใด ๆเกี่ยวกับรหัสนี้ แต่เพื่อความสนุก:

public static string Repeat(this string @this, int count)
{
    var dest = new char[@this.Length * count];
    for (int i = 0; i < dest.Length; i += 1)
    {
        dest[i] = @this[i % @this.Length];
    }
    return new string(dest);
}

เห็นได้ชัดว่าฉันออกจากที่ในการทดสอบสำหรับผู้อ่านที่ชาญฉลาด :) ชาญฉลาดมากขอบคุณ
OlduwanSteve

1
ไม่มีอะไรที่โรงเรียนเก่าเกี่ยวกับการตั้งชื่อ @this พารามิเตอร์ที่ได้รับมักจะเป็นความคิดที่น่ากลัว :)
เดฟ Jellison

2
ฉันไม่ต้องการใช้คำหลักเป็นชื่อตัวแปรยกเว้นบังคับ (เช่น @class = "บางอย่าง" เมื่อทำงานกับ MVC เพราะคุณต้องการคลาสที่อ้างถึง CSS แต่เป็นคำหลักใน C # (แน่นอน) นี่ไม่ใช่แค่ฉันกำลังพูดถึง เป็นกฎทั่วไปโดยย่อแม้ว่าจะเป็นรหัสที่รวบรวมได้และถูกต้องตามกฎหมาย แต่ให้คิดเกี่ยวกับความสะดวกในการอ่านและการพิมพ์เช่นกันด้วยเหตุผลเชิงปฏิบัติฉันมีบางส่วนที่ใช้ชื่อพารามิเตอร์เพื่ออธิบายสิ่งที่เกิดขึ้นก่อน จำนวนนับ) อาจเป็นตัวอย่างเพิ่มเติม
Dave Jellison

1
น่าสนใจขอบคุณ ฉันคิดว่าในกรณีนี้คุณอาจพูดถูกว่า @ นี่เป็นคำอธิบายที่น้อยกว่าที่ควรจะเป็น อย่างไรก็ตามโดยทั่วไปฉันคิดว่าเป็นเรื่องปกติที่จะขยายคลาสหรืออินเทอร์เฟซที่ชื่อที่สมเหตุสมผลสำหรับ 'this' นั้นค่อนข้างทั่วไป หากคุณมีพารามิเตอร์ที่เรียกว่า 'อินสแตนซ์' หรือ 'มัน' หรือ 'str' (ดูMSDN ) ดังนั้นสิ่งที่คุณอาจหมายถึงคือ 'นี่'
OlduwanSteve

1
โดยทั่วไปฉันเห็นด้วยกับคุณ แต่เพื่อเหตุผลในการโต้แย้ง ... เนื่องจากฉันรู้มากขึ้นเกี่ยวกับสตริงที่ฉันสร้างฉันสามารถทำงานได้ดีกว่าเล็กน้อยกว่า StringBuilder StringBuilder ต้องเดาเมื่อมันจัดสรรหน่วยความจำ จริงอยู่ที่มันไม่น่าจะเกิดขึ้นในหลาย ๆ สถานการณ์ แต่บางคนที่อยู่ข้างนอกนั้นอาจจะสร้างสายซ้ำจำนวนมากในแบบคู่ขนานและดีใจที่ได้รับรอบสองสามรอบย้อนกลับ :)
OlduwanSteve

2

ไม่แน่ใจว่ามันจะทำงานได้อย่างไร แต่มันเป็นโค้ดที่ง่าย (ฉันอาจทำให้มันดูซับซ้อนกว่านี้)

int indentCount = 3;
string indent = "---";
string stringToBeIndented = "Blah";
// Need dummy char NOT in stringToBeIndented - vertical tab, anyone?
char dummy = '\v';
stringToBeIndented.PadLeft(stringToBeIndented.Length + indentCount, dummy).Replace(dummy.ToString(), indent);

หรือถ้าคุณรู้จำนวนสูงสุดของระดับที่คุณสามารถคาดหวังได้คุณก็สามารถประกาศอาร์เรย์และดัชนีลงไปได้ คุณอาจต้องการทำให้อาร์เรย์นี้คงที่หรือคงที่

string[] indents = new string[4] { "", indent, indent.Replace("-", "--"), indent.Replace("-", "---"), indent.Replace("-", "----") };
output = indents[indentCount] + stringToBeIndented;      

2

ฉันมีตัวแทนไม่มากพอที่จะแสดงความคิดเห็นต่อคำตอบของอดัม แต่วิธีที่ดีที่สุดในการทำเช่นนี้คือ:

public static string RepeatString(string content, int numTimes) {
        if(!string.IsNullOrEmpty(content) && numTimes > 0) {
            StringBuilder builder = new StringBuilder(content.Length * numTimes);

            for(int i = 0; i < numTimes; i++) builder.Append(content);

            return builder.ToString();
        }

        return string.Empty;
    }

คุณต้องตรวจสอบเพื่อดูว่า numTimes มากกว่าศูนย์หรือไม่คุณจะได้รับการยกเว้น


2

ฉันไม่เห็นวิธีแก้ปัญหานี้ ฉันพบว่าง่ายขึ้นสำหรับที่ฉันอยู่ในการพัฒนาซอฟต์แวร์:

public static void PrintFigure(int shapeSize)
{
    string figure = "\\/";
    for (int loopTwo = 1; loopTwo <= shapeSize - 1; loopTwo++)
    {
        Console.Write($"{figure}");
    }
}

2

สำหรับการใช้งานทั่วไปโซลูชันที่เกี่ยวข้องกับคลาส StringBuilder จะดีที่สุดสำหรับการทำซ้ำสตริงที่มีหลายอักขระ มันได้รับการปรับให้เหมาะสมในการจัดการการรวมกันของสตริงจำนวนมากในวิธีที่การต่อข้อมูลแบบง่ายไม่สามารถทำได้และนั่นจะเป็นเรื่องยากหรือเป็นไปไม่ได้ โซลูชัน StringBuilder ที่แสดงที่นี่ใช้การทำซ้ำO (N)เพื่อให้เสร็จสมบูรณ์อัตราคงที่ตามสัดส่วนกับจำนวนครั้งที่มีการทำซ้ำ

อย่างไรก็ตามสำหรับการทำซ้ำจำนวนมากหรือในกรณีที่ต้องบีบระดับประสิทธิภาพออกไปวิธีที่ดีกว่าคือการทำสิ่งที่คล้ายกับฟังก์ชันการทำงานพื้นฐานของ StringBuilder แต่เพื่อสร้างสำเนาเพิ่มเติมจากปลายทางแทนที่จะเป็นสตริงต้นฉบับ ดังต่อไปนี้.

    public static string Repeat_CharArray_LogN(this string str, int times)
    {
        int limit = (int)Math.Log(times, 2);
        char[] buffer = new char[str.Length * times];
        int width = str.Length;
        Array.Copy(str.ToCharArray(), buffer, width);

        for (int index = 0; index < limit; index++)
        {
            Array.Copy(buffer, 0, buffer, width, width);
            width *= 2;
        }
        Array.Copy(buffer, 0, buffer, width, str.Length * times - width);

        return new string(buffer);
    }

สิ่งนี้จะเพิ่มความยาวของสตริงต้นทาง / ปลายทางเป็นสองเท่าด้วยการวนซ้ำแต่ละครั้งซึ่งจะช่วยประหยัดค่าใช้จ่ายในการรีเซ็ตตัวนับในแต่ละครั้งที่มันผ่านสตริงต้นฉบับแทนที่จะอ่านและคัดลอกสตริงที่ยาวขึ้นเดี๋ยวนี้ มีประสิทธิภาพมากขึ้น

มันใช้ลอการิทึมฐาน 2 เพื่อค้นหาจำนวนครั้งที่ต้องใช้สองเท่าของความยาวของสตริงและจากนั้นดำเนินการทำเช่นนั้นหลายครั้ง เนื่องจากส่วนที่เหลือที่จะทำการคัดลอกนั้นน้อยกว่าความยาวทั้งหมดที่จะทำการคัดลอกจากนั้นจึงสามารถคัดลอกส่วนย่อยของสิ่งที่สร้างไว้แล้วได้

ฉันใช้ Array.Copy () วิธีการมากกว่าการใช้ StringBuilder เป็นการคัดลอกเนื้อหาของ StringBuilder ลงในตัวเองจะมีค่าใช้จ่ายในการผลิตสตริงใหม่ที่มีเนื้อหาที่มีการทำซ้ำแต่ละ Array.Copy () หลีกเลี่ยงสิ่งนี้ในขณะที่ยังคงทำงานด้วยอัตราประสิทธิภาพที่สูงมาก

วิธีนี้ใช้การวนซ้ำO (1 + log N)อัตราที่เพิ่มขึ้นแบบลอการิทึมโดยมีจำนวนการทำซ้ำ (การเพิ่มจำนวนการทำซ้ำเป็นสองเท่าเท่ากับการซ้ำเพิ่มเติมหนึ่งครั้ง) ซึ่งเป็นการประหยัดอย่างมีนัยสำคัญมากกว่าวิธีอื่น ๆ


1

อีกวิธีหนึ่งคือการพิจารณาstringเป็น IEnumerable<char>และมีวิธีการขยายทั่วไปซึ่งจะคูณรายการในคอลเลกชันโดยปัจจัยที่ระบุ

public static IEnumerable<T> Repeat<T>(this IEnumerable<T> source, int times)
{
    source = source.ToArray();
    return Enumerable.Range(0, times).SelectMany(_ => source);
}

ดังนั้นในกรณีของคุณ:

string indent = "---";
var f = string.Concat(indent.Repeat(0)); //.NET 4 required
//or
var g = new string(indent.Repeat(5).ToArray());

1

พิมพ์บรรทัดด้วยการทำซ้ำ

Console.Write(new string('=', 30) + "\n");

==============================


ทำไมคุณไม่ใช้ Console.WriteLine แทนการต่อท้าย \ n ที่ส่วนท้ายของสตริง
InxaneNinja

-1

คุณสามารถสร้าง ExtensionMethod ได้!

public static class StringExtension
{
  public static string Repeat(this string str, int count)
  {
    string ret = "";

    for (var x = 0; x < count; x++)
    {
      ret += str;
    }

    return ret;
  }
}

หรือใช้โซลูชัน @Dan Tao:

public static class StringExtension
{
  public static string Repeat(this string str, int count)
  {
    if (count == 0)
      return "";

    return string.Concat(Enumerable.Repeat(indent, N))
  }
}

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