2009-05-29 7 views
0

Ich wollte immer in der Lage sein, die folgende Zeile verwenden, aber der C# -Compiler wird mich nicht lassen. Mir scheint es offensichtlich und eindeutig, was ich will.Minimalist Array-Erstellung in C#

myString.Trim({'[', ']'}); 

Ich kann mein Ziel acheive mit:

myString.Trim(new char[]{'[', ']'}); 

Also ich frage nicht sterben ist es eine andere Möglichkeit, es zu tun, die näher an dem ersten Ansatz ist?

Antwort

8

Die string.Trim(...) Methode nimmt tatsächlich ein params Argument, so, warum nennst du nicht nur:

myString.Trim('[', ']'); 
+1

Falls Sie noch nie zuvor mit 'params' gearbeitet haben, lohnt es sich, in der IDE-Hilfe nachzuschlagen ... – jerryjvl

+0

Ich vergesse immer die einfachen Anführungszeichen, um Zeichen anzuzeigen. Subtil, aber signifikant. – HitLikeAHammer

3

Dies wird auch funktionieren ...

myString.Trim('[',']'); 

Hinweis die params Erklärung im defition von Trim, lassen Sie so viele Argumente wie Sie wollen und nimmt sie als Array.

3

Sie konnten dieses versuchen:

myString.Trim("[]".ToCharArray()); 
6

Andere auf dem spezifischen Beispiel konzentriert haben (und unter Verwendung der Tatsache, dass es ein Parameter-Array ist, ist der Weg zu gehen), aber Sie können in C# 3 implizite interessiert sein tippen. Sie könnte geschrieben haben:

myString.Trim(new[] {'[', ']'}); 

Nicht ganz so kompakt wie Sie nach waren, als Sie noch „Ich möchte ein Array erstellen“ zum Ausdruck bringen müssen, das Konzept der, wenn Sie eine Variableninitialisierer gerade schreiben , aber der Typ des Arrays wird aus dem Inhalt abgeleitet.

Der große Anwendungsfall dafür ist, anonyme Typen:

var skeets = new[] { 
    new { Name="Jon", Age=32 }, 
    new { Name="Holly", Age=33 }, 
    new { Name="Tom", Age=5 }, 
    new { Name="Robin", Age=3 }, 
    new { Name="William", Age=3 } 
}; 

Hier können Sie konnte nicht den Namen des Typs schreiben, weil es keinen Namen haben (das in C# ausdrückbar ist).

Ein weiterer Punkt über Ihr konkretes Beispiel zu machen - wenn Sie dies geht häufig verwenden (dh die Trim Methode oft nennen) Sie jedes Mal zu schaffen sowieso ein neues Array vermeiden möchten:

private static readonly char[] SquareBrackets = {'[', ']'}; 

public void Whatever() { 
    ... 
    foo = myString.Trim(SquareBrackets); 
    ... 
} 
+0

In Fällen, in denen es keine "Params" gibt, um damit zu arbeiten, ist es immer möglich, eine Alternative mit Extension-Methoden zusammenzustellen, aber ich bin mir nicht sicher, ob das im Zusammenhang mit dieser Frage als "Betrug" eingestuft würde;) – jerryjvl

+0

Warum? Die C# Designer entscheiden, dass "new []" benötigt wird. Kann die Syntax von for {..., ..., ...} jemals benutzt werden, um alles außer einem Array zu deklarieren? – sipwiz

+0

Anonyme Typen: new {foo, bar, baz} ist gültig. Ebenso Auflistungsinitialisierer, wenn sie nur zu einer bestehenden Sammlung hinzugefügt werden. Ich denke, es macht es klarer, was Sie tun - Sie brauchen weniger Kontext, um zu verstehen, wofür die Klammern da sind. –