我有一些代码给我带来了一些麻烦。
我正在尝试将图像列表捆绑到一个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。
如何创建一个动态对象来保存一对字符串(最好在变量上包含属性名称)而不创建一个全新的类?
答案 0 :(得分:5)
答案 1 :(得分:4)
您可以像这样创建anonymous type:
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);
答案 2 :(得分:1)
答案 3 :(得分:1)
如何创建一个动态对象来保存一对字符串(最好在变量上包含属性名称)而不创建一个全新的类?
使用Tuple。
// 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));