あなたは間違いなく変数から読み込むことができます。明確な割り当ての点で問題はありません。そうでないと、コンパイル時にエラーが発生します。たとえば、これは問題ありません。
using System;
using System.IO;
class Test
{
static void Main()
{
string x;
using (new MemoryStream())
{
x = "hello";
}
Console.WriteLine(x);
}
}
これは絶対に問題ありません。
SevenZipArchive
がReadOnlyCollection<string>
を返す場合、私はとなります。通常、はアーカイブ自体が破棄された後でも有効であると考えます。しかし、ReadOnlyCollection<T>
は、単に別のコレクションのラッパーです...そして、そのコレクションがarchive
の処分によって無効にされている場合、それは確かに事柄を説明します。
残念ながら、コレクションをコピーするには、別のラッパーを作成することをお勧めします。最初のラッパーにカウントを求め、元の(無効にされた)コレクションを要求します。
private ReadOnlyCollection<string> ExtractRar(string varRarFileName,
string varDestinationDirectory) {
ReadOnlyCollection<string> collection;
using (var archive = new SevenZipArchive(varRarFileName)) {
collection = new ReadOnlyCollection<string>(archive.Volumes.ToList());
MessageBox.Show(collection.Count.ToString()); // output 10
}
MessageBox.Show(collection.Count.ToString()); // output 0
return collection;
}
注ToList()
への余分な呼び出し:
はここで動作するはず一つの方法です。これにより、コレクションは最初にList<string>
にコピーされます。ラッパーを作成するだけでなく、本当にコピーされます。もちろん
、メソッドがリストを返す場合、あなたが本当に気にしないならば、あなただけ使用できます。
:あなたは余分な診断を必要としないときに
private List<string> ExtractRar(string varRarFileName,
string varDestinationDirectory) {
List<string> collection;
using (var archive = new SevenZipArchive(varRarFileName)) {
collection = archive.Volumes.ToList();
MessageBox.Show(collection.Count.ToString()); // output 10
}
MessageBox.Show(collection.Count.ToString()); // output 0
return collection;
}
...と
private List<string> ExtractRar(string varRarFileName,
string varDestinationDirectory) {
using (var archive = new SevenZipArchive(varRarFileName)) {
return archive.Volumes.ToList();
}
}
(私はToList
拡張メソッドを使用するために、方法によって、あなたは.NET 3.5以降を使用していると仮定しています。)
これはうまくいった:-) – MadBoy
はい。チェックされたドキュメントと私の '新しい'理論は確かにこの場合には動作しません。これははるかに良いです。 –