请教各位高手关于IList和IList的问题

leon8082 2009-06-11 04:00:38
IList a = new ArrayList();
IList<string> b = new List<string>();

bool c = b is a;

c的值竟然是true,哪位高手能帮忙解释一下这是为什么,我看MSDN中写的IList<T>与IList两个接口没有什么继承关系,不知道为什么会出现这种情况。

谢谢关注,谢谢回答~~~~
...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon8082 2009-06-12
  • 打赏
  • 举报
回复
楼上的,给出这个代码不明白是什么意思??

结果是预期的False,跟我说的问题正好符合。

请高手给解释,谢谢~~
wuyq11 2009-06-12
  • 打赏
  • 举报
回复
IList <Class1> lst =new List <Class1>();
只是创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的
/// 转换IList<T>为List<T>
public static List<T> ConvertIListToList<T>(IList gList) where T : class
{
if (gbList != null && gList.Count > 1)
{
List<T> list = new List<T>();
for (int i = 0; i < gbList.Count; i++)
{
T temp = gList[i] as T;
if (temp != null)
list.Add(temp);
}
return list;
}
return null;
}
emil_522 2009-06-11
  • 打赏
  • 举报
回复
IList<string> test = new List<string>();
Response.Write((test as IList == null).ToString());
leon8082 2009-06-11
  • 打赏
  • 举报
回复
我知道IList实例无法显示或隐式转换成IList<T>实例,但是为什么IList<T>实例可以隐式转换成IList实例我就不知道了
leon8082 2009-06-11
  • 打赏
  • 举报
回复
实际应用中,IList<T>实例能隐式转换为IList实例,这是为什么?
wfyfngu 2009-06-11
  • 打赏
  • 举报
回复
转楼下回答,
可以讲下 is 这个关键字。
leon8082 2009-06-11
  • 打赏
  • 举报
回复
这个代码肯定没错,我VS2005 FCL2.0调试运行成功

兼容?为什么泛型类和非泛型类能够兼容呢,没有继承关系也能兼容?
十八道胡同 2009-06-11
  • 打赏
  • 举报
回复
检查对象是否与给定类型兼容。例如,下面的代码可以确定对象是否为 MyObject 类型的一个实例,或者对象是否为从 MyObject 派生的一个类型:

复制代码
if (obj is MyObject)
{
}如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。

如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。

不能重载 is 运算符。

请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

在 is 运算符的左侧不允许使用匿名方法。lambda 表达式属于例外。

十八道胡同 2009-06-11
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/scekt9xw.aspx
emil_522 2009-06-11
  • 打赏
  • 举报
回复
按你的意思 应该 是 他们 都继承 了 IEnumerable
emil_522 2009-06-11
  • 打赏
  • 举报
回复
代码都不对 bool c = b is a;

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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