1026 Stimmen

Beste Möglichkeit, ein Zeichen in C# zu wiederholen

Wie kann man am besten eine Zeichenkette aus \t 's in C#

Ich lerne gerade C# und experimentiere mit verschiedenen Möglichkeiten, das Gleiche zu sagen.

Tabs(uint t) ist eine Funktion, die eine string con t Betrag von \t 's

Zum Beispiel Tabs(3) gibt zurück. "\t\t\t"

Welche dieser drei Möglichkeiten der Umsetzung Tabs(uint numTabs) am besten ist?

Das hängt natürlich davon ab, was "am besten" bedeutet.

  1. Die LINQ-Version besteht nur aus zwei Zeilen, was sehr angenehm ist. Aber sind die Aufrufe von Repeat und Aggregate unnötig zeit- und ressourcenaufwändig?

  2. Le site StringBuilder Version ist sehr klar, aber ist die StringBuilder Klasse irgendwie langsamer?

  3. Le site string Version ist einfach, d. h. sie ist leicht zu verstehen.

  4. Spielt das überhaupt keine Rolle? Sind sie alle gleich?

Dies sind alles Fragen, die mir helfen sollen, ein besseres Gefühl für C# zu bekommen.

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
    return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : ""; 
}  

private string Tabs(uint numTabs)
{
    StringBuilder sb = new StringBuilder();
    for (uint i = 0; i < numTabs; i++)
        sb.Append("\t");

    return sb.ToString();
}  

private string Tabs(uint numTabs)
{
    string output = "";
    for (uint i = 0; i < numTabs; i++)
    {
        output += '\t';
    }
    return output; 
}

8voto

w.b Punkte 10628
var str = new string(Enumerable.Repeat('\t', numTabs).ToArray());

4voto

Dmitri Nesteruk Punkte 21873

Die Antwort hängt wirklich von der gewünschten Komplexität ab. Ich möchte zum Beispiel alle meine Einzüge mit einem vertikalen Balken umreißen, also wird meine Einzugszeichenfolge wie folgt festgelegt:

return new string(Enumerable.Range(0, indentSize*indent).Select(
  n => n%4 == 0 ? '|' : ' ').ToArray());

4voto

Artyom Punkte 3297

Und noch eine andere Methode

new System.Text.StringBuilder().Append('\t', 100).ToString()

4voto

ivan Punkte 56

Sie können eine Erweiterungsmethode erstellen

static class MyExtensions
{
    internal static string Repeat(this char c, int n)
    {
        return new string(c, n);
    }
}

Dann können Sie sie wie folgt verwenden

Console.WriteLine('\t'.Repeat(10));

4voto

Ángel Ibáñez Punkte 181

Für mich ist das in Ordnung:

public static class Utils
{
    public static string LeftZerosFormatter(int zeros, int val)
    {
        string valstr = val.ToString();

        valstr = new string('0', zeros) + valstr;

        return valstr.Substring(valstr.Length - zeros, zeros);
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X