2012-02-22 17 views
224

同じコード内で2つの変数を宣言することによって、このコードを少しコンパクトにすることはできますか?複数の変数を含むステートメントを使用する

using (var sr = new StringReader(content)) 
{ 
    using (var xtr = new XmlTextReader(sr)) 
    { 
     obj = XmlSerializer.Deserialize(xtr) as TModel; 
    } 
} 
+5

'新しいXmlTextReaderクラスを()'を使用しないでください。 'XmlReader.Create()'を使用してください。 –

+1

@JohnSaundersはなぜですか? –

+10

.NET 2.0以降、 'new XmlTextReader()'は非推奨です。 'XmlReader.Create()'を使うことによって、ただ一つの 'XmlTextReader'クラスではなく、最も派生した' XmlReader'クラスを得ることができます。 –

答えて

417

受け入れられた方法は、単にチェーンに文です:IDEもこのインデントをサポートすること

using (var sr = new StringReader(content)) 
using (var xtr = new XmlTextReader(sr)) 
{ 
    obj = XmlSerializer.Deserialize(xtr) as TModel; 
} 

注、すなわち、それは意図的に二using文をインデントしようとしません。

+0

これは、相互に内のステートメントをスコープするために、または実際に何らかのチェーンにコンパイルするために、one-liner-no-bracesルールを使用しますか? – ssube

+0

@peachykeenネストされたブロックですが、この場合、これは 'using'のセマンティクスのためにチェーンと区別がつかないと思います。そうでなければ、私はあなたがチェーンで何を意味するのか理解していません。「使用する」ためには、各リソースは独自の 'try' ...' finally'ブロックを必要とします。 –

+0

私はこのコードと質問の間に違いがないことを知る。 –

96

以下は、同じタイプのインスタンスでのみ機能します。コメントありがとうございます。

このサンプルコードはMSDNからです:

using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f)) 
{ 
    // Use font3 and font4. 
} 
+23

これは、変数が同じタイプの場合にのみ機能します。 –

+1

両方のオブジェクトが同じ型である場合にのみ動作するようです –

+3

次に変数をIDisposableとして宣言して後でキャストしますか? –

関連する問題