2009-05-29 18 views
0

私はいつも以下の行を使用したいと思っていましたが、C#コンパイラは私を私にさせません。私には、私が欲しいものは明白で不明瞭です。cでのミニマリスト配列の作成

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

私が使用して私の目標をacheiveすることができます

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

だから私は思って死ぬことはない最初のアプローチに近いそれを行うための他の方法はありますか?

答えて

8

string.Trim(...)方法は、実際にparams引数を取り、そう、なぜあなただ​​け呼び出すことはありません:

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

前に 'params'で作業したことがない場合は、IDEのヘルプを参照する価値があります。 – jerryjvl

+0

私はいつも文字を示すために小さな引用符を忘れています。微妙だが重要。 – HitLikeAHammer

3

をこれも動作します...

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

注defitionでparams宣言をTrimの場合、必要な引数を渡して配列として受け取ります。

3

また、これを試みることができる:

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

その他は具体的な例に集中し(それはパラメータの配列を移動するための方法であるという事実を使用して)、しかし、あなたはC#3の暗黙的に興味がある可能性がありきタイピング。あなた書かれている可能性があり:

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

ないかなりコンパクトとして、あなたが後にあったように、あなたはまだあなたが変数初期化子を書いている場合を除き「私は配列を作成したい」というコンセプトを表現する必要があるとして、配列の型は内容から推測されます。

このため、大きなユースケースは、匿名型である:それは名前を持っていないので、ここで

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

あなたがは(それはC#で表現可能です)、タイプの名前を書くことができませんでした。

もう一つのポイントは、あなたの具体的な例について作る

- あなたはとにかく新しい配列を毎回作成しないようにすることもできます(つまり、多くの場合、Trimメソッドを呼び出す)、頻繁にこれを使用するつもりなら:

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

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

'params'が動作しない場合は、拡張メソッドと一緒に選択肢を追加することはいつも可能ですが、この質問の文脈で「不正行為」と分類されるかどうかはわかりません); – jerryjvl

+0

なぜC#デザイナーは「新しい[]」が必要と判断しますか? for {...、...、...}の構文を使って配列以外のものを宣言することはできますか? – sipwiz

+0

匿名タイプ:new {foo、bar、baz}が有効です。同様に、既存のコレクションに追加するときだけ、イニシャライザを収集します。私はそれがあなたがやっていることをより明確にしてくれると思います。 –

関連する問題