无法跨越程序集边界使用程序集

阔活洵信 2013-06-15 10:22:27
c# AE开发
首先定义了一个静态类CurrentSelect
里面有个属性是List<ILayer> CurrentLayerList
调用的时候 CurrentSelect.CurrentLayerList.RemoveAt(i),在CurrentLayerList处报错:

错误 2 无法跨越程序集边界使用程序集“//path//”中的成员“CurrentSelect.CurrentLayerList”,因为该成员包含的某个类型具有一个为嵌入互操作类型的泛型类型参数。
求问大神是怎么回事
...全文
950 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
炘火尽 2014-08-21
  • 打赏
  • 举报
回复 6
将List 改成 IList 就OK
  • 打赏
  • 举报
回复
引用 3 楼 zxhm001 的回复:
MSDN上是这样说的: 如果一个类型使用泛型参数且泛型参数的类型是嵌入类型,则不能跨程序集边界使用该类型。 跨程序集边界的示例包括从另一个程序集调用方法或从另一个程序集中定义的类型派生类型。 就是说我把CurrentSelcet和调用函数写在同一个程序集里面就OK了,我猜是这样的,还没试验
你这样死扣字眼会得到荒谬的结论的。所谓“就是说我把CurrentSelcet和调用函数写在同一个程序集里面就OK了”这就是很荒谬的结论。难道我们从此再也不能使用List<T>之类的东西了么?它毕竟不是定义在我们的应用程序的程序集中的。
  • 打赏
  • 举报
回复
你的代码还是隐藏了关键的东西:pFcName到底是什么东东呢? 接口并不表明实现,因此你的代码 IName pName = pFcName as IName 无法说明这个 pFcName 是个什么东东。 这说明了你根本没有调试这个参数所引用的具体的对象。
阔活洵信 2013-06-15
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
你写两行代码,看看如何实例化对象并Add到集合中的?!
MSDN上是这样说的: 如果一个类型使用泛型参数且泛型参数的类型是嵌入类型,则不能跨程序集边界使用该类型。 跨程序集边界的示例包括从另一个程序集调用方法或从另一个程序集中定义的类型派生类型。 就是说我把CurrentSelcet和调用函数写在同一个程序集里面就OK了,我猜是这样的,还没试验
阔活洵信 2013-06-15
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
你写两行代码,看看如何实例化对象并Add到集合中的?!
代码如下: public void DeleteFeatureClass(AxMapControl MapControl, IFeatureClassName pFcName) { IName pName = pFcName as IName; IFeatureClass pFc = pName.Open() as IFeatureClass; for (int i = 0; i <= MapControl.LayerCount; i++) { if (MapControl.get_Layer(i).Name == (pFc as IDataset).Name) { MapControl.DeleteLayer(i); CurrentSelect.CurrentLayerList.RemoveAt(i); break; } } } 那个是没有问题的,因为我的CurrentSelect中还有属性ILayer ActiveLayer, 用这样的方式操作ActiveLayer是没有问题的
  • 打赏
  • 举报
回复
你写两行代码,看看如何实例化对象并Add到集合中的?!

110,586

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧