【发布时间】:2011-04-19 14:33:43
【问题描述】:
我正在尝试为我的老板创建一个小型的概念验证应用程序,但是我创建的模拟他尝试实现的代码不起作用。
for (int i = 0; i < 5000; i++)
{
((IList<string>) obj2.Stuff).Add("Iteration " + i.ToString());
}
我试图在一行中完成所有这些,因为这就是他的代码前几天在我们正在开发的框架中的样子。当上面的代码执行时,我得到一个运行时错误,说“集合是固定大小的”。当我尝试转换为 List 而不是 IList 时,我收到一个 InvalidCastException,说“无法将 'System.String[]' 类型的对象转换为 'System.Collections.Generic.List`1[System.String]' 。”
任何人对我如何实现单行转换以将项目添加到 IEnumerable 或帮助我找出解决我不断遇到的两个错误的方法有任何想法?提前致谢。
编辑(美国东部标准时间 2011 年 4 月 19 日上午 10:49) 我正在添加更多代码来帮助人们 - 可能应该早点这样做。对不起。
程序.cs:
#region Cast Test
Class1 obj2 = new Class1();
obj2.Stuff = Enumerable.Empty<string>();
Console.WriteLine("Cast - Start Time: " + 0 + "ms");
Stopwatch stopwatch2 = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 5000; i++)
{
((IList<string>) obj2.Stuff).Add("Iteration " + i.ToString());
}
stopwatch2.Stop();
Console.WriteLine("Cast - Stop Time: " + stopwatch2.ElapsedMilliseconds.ToString() + "ms");
#endregion
Class1.cs:
public class Class1
{
private IEnumerable<string> stuff;
public IEnumerable<string> Stuff
{
get { return stuff; }
set { stuff = value; }
}
}
【问题讨论】:
-
obj2.Stuff 的 REAL 类型是什么?从异常来看,它看起来像一个字符串[]?
-
请张贴定义
obj2.Stuff的代码。我的直觉是obj2.Stuff是一个数组而不是 List 类型。 -
@Daniel & Muad'Dib:obj2 只是一个对象。 Stuff 只是所述对象的 IEnumerable
属性。 -
IEnumerable<string>没有Add方法。将其转换为不同的类型不会神奇地创建新属性,如果它们已经存在,它只会公开它们。 -
你要打到
IEumerable吗?
标签: c# list casting ienumerable