2008-11-17 32 views

Trả lời

14

Nó phụ thuộc những gì bạn cần ... có new string('a',3) ví dụ.

Để làm việc với chuỗi; bạn chỉ có thể lặp lại ... không phải là rất thú vị, nhưng nó sẽ hoạt động.

Với 3,5, bạn có thể sử dụng Enumerable.Repeat("a",3), nhưng điều này cung cấp cho bạn chuỗi các chuỗi chứ không phải chuỗi ký tự.

Nếu bạn đang sử dụng này rất nhiều, bạn có thể sử dụng một phương pháp mở rộng C# 3.0 bespoke:

static void Main() 
    { 
     string foo = "foo"; 
     string bar = foo.Repeat(3); 
    } 
    // stuff this bit away in some class library somewhere... 
    static string Repeat(this string value, int count) 
    { 
     if (count < 0) throw new ArgumentOutOfRangeException("count"); 
     if (string.IsNullOrEmpty(value)) return value; // GIGO    
     if (count == 0) return ""; 
     StringBuilder sb = new StringBuilder(value.Length * count); 
     for (int i = 0; i < count; i++) 
     { 
      sb.Append(value); 
     } 
     return sb.ToString(); 
    } 
+1

Marc không bạn nghĩ StringBuilder(). Chèn (0, giá trị, đếm) là tốt hơn? –

+0

Vị trí tốt; chỉ đơn giản là không thấy quá tải ... –

5

Nếu bạn chỉ cần lặp lại một nhân vật duy nhất (như trong ví dụ của bạn) thì điều này sẽ làm việc :

Console.WriteLine(new string('a', 3)) 
+0

Chỉ hoạt động cho "chuỗi mới (CHAR, COUNT)", không cho chuỗi. – Tom

+0

Đúng, nhưng nó đáp ứng yêu cầu trong câu hỏi. – GeekyMonkey

+0

Vì vậy, toán tử lặp lại của Perl chỉ hoạt động trên các ký tự? Thực tế là ông đã sử dụng một chuỗi bao gồm một nhân vật duy nhất không nên nghiêng bạn để hạn chế câu trả lời cho ví dụ cụ thể đó. Câu hỏi tổng quát hơn. – Tom

-1

Nếu bạn cần làm điều này bằng các chuỗi như Tom đã chỉ ra, thì phương pháp tiện ích sẽ thực hiện công việc một cách độc đáo.

static class StringHelpers 
{ 
    public static string Repeat(this string Template, int Count) 
    { 
     string Combined = Template; 
     while (Count > 1) { 
      Combined += Template; 
      Count--; 
     } 
     return Combined; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string s = "abc"; 
     Console.WriteLine(s.Repeat(3)); 
     Console.ReadKey(); 
    } 
+0

Đối với công việc trong một vòng lặp như thế này, nó sẽ được khuyến khích sử dụng StringBuilder ... nối là tốt cho 2-hoặc-3, nhưng nếu ai đó yêu cầu "a" .Repeat (100) bạn có rất nhiều chuỗi không cần thiết để sưu tầm. –

+0

Đó là sự thật. Có một số điểm trong đó StringBuilder trở nên hiệu quả hơn. Tôi đã nghe nói rằng đó là khoảng 10. Trong ví dụ cho anh ta có 3, vì vậy tôi cho rằng nó sẽ nhỏ. Nếu bạn muốn bao quát một phạm vi rộng hơn, sau đó đặt vào một "if" và sử dụng StringBuilder cho hơn 10 sẽ hiệu quả hơn. – GeekyMonkey

5

Vâng trong tất cả các phiên bản của .NET để lặp lại một chuỗi bạn luôn có thể làm điều này

public static string Repeat(string value, int count) 
{ 
    return new StringBuilder().Insert(0, value, count).ToString(); 
} 
Các vấn đề liên quan