环境:win2K+.net2.0+#develp有方法定义如下:
void ScanProjectItems(List<ProjectItem> projectItems, LineCountSummary summary)调用代码:
ScanProjectItems(fiProject.Items, summary);得到编译错误:
参数“1”: 无法从
“System.Collections.ObjectModel.ReadOnlyCollection<ICSharpCode.SharpDevelop.Project.ProjectItem>”转换为
“System.Collections.Generic.List<ICSharpCode.SharpDevelop.Project.ProjectItem>” (CS1503) - 
E:\DownLoad\SharpDevelop_2.1.0.2429_Final_Source\samples\LineCounter\Src\LineCounterBrowser.cs:807,23
修改调用代码为:
ScanProjectItems((List<ProjectItem>)fiProject.Items, summary);得到编译错误:
无法将类型“System.Collections.ObjectModel.ReadOnlyCollection<ICSharpCode.SharpDevelop.Project.ProjectItem>”转换为“System.Collections.Generic.List<ICSharpCode.SharpDevelop.Project.ProjectItem>” (CS0030) - E:\DownLoad\SharpDevelop_2.1.0.2429_Final_Source\samples\LineCounter\Src\LineCounterBrowser.cs:807,23子类不能转换为基类,感觉很奇怪,请大家给参谋参谋。

解决方案 »

  1.   

    显示转换
    不行的话需要自己写一个循环一个个的转化.--------------------------------------------
    集合和数组比较奇怪:
    A是B的父类
    但是A[]不是B[]的父类
      

  2.   

    没有看明白你的代码!作为public的子类指针可以转化为基类指针,
    但是protected,private 继承的子类指针不能转化为基类指针
      

  3.   

    方法定义:
    void ScanProjectItems(List<ProjectItem> projectItems, LineCountSummary summary)调用代码:
    ScanProjectItems(fiProject.Items, summary);说明:
    fiProject.Items 是 System.Collections.ObjectModel.ReadOnlyCollection<ProjectItem> 类型;ReadOnlyCollection<T> 继承自 IList<T> 。疏漏:
    这里是 List<T> 而不是 IList<T>;
    List<T> 也继承自 IList<T> ,两个互不相识的子类转换当然出错了。想来方法定义应该做一个修改:
    void ScanProjectItems(IList<ProjectItem> projectItems, LineCountSummary summary)等我测试成功后再给大家散分。
      

  4.   

    修改了一下,程序确实编译过去了。
    但是在#develop里竟然有这样的问题,是不是他们不能很好的保证本地代码与控制代码的一致性?