3

我有一些代码给我带来了一些麻烦。

我正在尝试将图像列表捆绑到一个 zip 文件中。我遇到的问题是,有时,其中一个图像在访问时会被打开,从而导致异常。

我很确定这是一个时间问题,所以我正在编写一个“第二次机会”循环来捕捉失败的图像(与现有的行为相反,它会在任何错误时停止并返回它迄今为止所拥有的) .

我在 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。

在我的捕获中,我需要存储两条信息:'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

如何创建一个动态对象来保存一对字符串(最好在变量上带有属性名称)而不创建一个全新的类?

使用元组

// 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 回答
1

还是动态对象?http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2012-08-29T18:49:15.943 回答