3

問題を引き起こしているコードが少しあります。

画像のリストをzipファイルにバンドルしようとしています。私が抱えている問題は、アクセス時に画像の1つが開かれ、例外が発生する場合があることです。

タイミングの問題だと確信しているので、「セカンドチャンス」ループをコーディングして、通過する画像をキャッチします(エラーが発生すると停止し、これまでの動作を返す既存の動作とは対照的です) 。

以下に示すように、tryブロックにエラーの可能性のあるコードセクションがあります

if (!Directory.Exists(physicalPath + "/" + fi.Description))
{
    Directory.CreateDirectory(physicalPath + "/" + fi.Description);
}
wc.DownloadFile(source, physicalPath + "/" + fileName);
ze = zip.AddFile(physicalPath + "/" + fileName, path);
ze.FileName = fileName;

「ze」はIonic.Zipライブラリの「ZipEntry」であり、「wc」はWebClientです。

私のキャッチでは、2つの情報を保存する必要があります。「source」と「physicalPath + "/"+filename」の結果の文字列です。

.NET 4には、このデータを保持するための新しいオブジェクトを動的に作成する方法があることは知っていますが、それが何と呼ばれているかは思い出せません。これは私のgoogle-fuを大いに妨げました。

まったく新しいクラスを作成せずに、文字列のペア(できれば変数にプロパティ名を含む)を保持する動的オブジェクトを作成するにはどうすればよいですか?

4

4 に答える 4

5

タプルを指しているのですか?

http://msdn.microsoft.com/en-us/library/system.tuple.aspx

于 2012-08-29T18:47:13.047 に答える
4

次のような匿名タイプを作成できます。

var obj = new { str1 = "something", str2 = "something else" };
Console.WriteLine(string.Format("str1: {0}, str2: {1}", obj.str1, obj.str2));

編集#1 匿名型の配列を作成するには..。

var arr = new[] { 
            new { str1 = "a", str2 = "b" },
            new { str1 = "c", str2 = "c" },
        };

編集#2これから一般的なリストを作成するには、少し凝ったものを入手する必要があります...

var obj = new { str1 = "", str2 = "" };
var type = typeof(List<>);
var listType = t.MakeGenericType(obj.GetType());
var list = (IList)Activator.CreateInstance(listType);
list.Add(new { str1 = "something", str2 = "something else" });

Console.WriteLine(((dynamic)list[0]).str1);
于 2012-08-29T18:50:32.230 に答える
1

または動的オブジェクト?http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2012-08-29T18:49:15.943 に答える
1

まったく新しいクラスを作成せずに、文字列のペア(できれば変数にプロパティ名を含む)を保持する動的オブジェクトを作成するにはどうすればよいですか?

タプルを使用します。

// this uses a tuple to create a generic class that holds two string values.
// We also use string.Format instead of path + "/" + fileName to generate the second value.
var zipData = new Tuple<string, string>(source, string.Format("{0}/{1}", physicalPath, fileName));
于 2012-08-29T18:51:50.933 に答える