环境: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子类不能转换为基类,感觉很奇怪,请大家给参谋参谋。
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子类不能转换为基类,感觉很奇怪,请大家给参谋参谋。
不行的话需要自己写一个循环一个个的转化.--------------------------------------------
集合和数组比较奇怪:
A是B的父类
但是A[]不是B[]的父类
但是protected,private 继承的子类指针不能转化为基类指针
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)等我测试成功后再给大家散分。
但是在#develop里竟然有这样的问题,是不是他们不能很好的保证本地代码与控制代码的一致性?