列表与LT;>新的,即时对象

时间:2012-08-29 18:44:57

标签: c# asp.net c#-4.0

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

我正在尝试将图像列表捆绑到一个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 个答案:

答案 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));