如题.

解决方案 »

  1.   

    if (new  List<string>() is IEnumerable<object>)
                {
                    MessageBox.Show("true");
                }
                else 
                {
                    MessageBox.Show("false");
                }
      

  2.   

    .net4才返回true(.net4支持generic covariance)。
    以前版本都将返回false。
      

  3.   


    //如果只是关心是否可列举,直接用
    o is System.Collections.IEnumerable//如果关心是否IEnumerable<T>,可以:
    static bool IsObjectGenericIEnumerable(object o)
    {
        return o is System.Collections.IEnumerable && (o.GetType().IsGenericType || o is Array);
    }
      

  4.   

    本帖最后由 caozhy 于 2011-04-13 12:31:46 编辑
      

  5.   

    public bool CheckType(object obj)
    {
        Type type = obj.GetType();
        if (type.IsGenericType)
        {
            Type baseType = type.GetInterface("System.Collections.Generic.IEnumerable`1");
            if (baseType == null)
                return false;
            if (obj.GetType().GetGenericArguments()[0] != typeof(object))
                return false;
        }
        return true;
    }
      

  6.   

    ...关List<string>和协变性啥事啊,问的是是否IEnumerable<object>,直接is下就有了,lz肯定没试
      

  7.   


    你该试试 IEnumerable<object> s = new List<string>(); //.net4.0才能编译通过。
      

  8.   


    我知道你的意思
    4.0下, List<string>的实例就是IEnumerable<object>类型,所以is返回true
    2.0下不是,所以is返回false
    无论哪个版本,都可以用is直接判断
    ---这是从lz的原问题来说如果你要追究他到底想实现什么的话,无非就是强制转换或as转换后赋值,那只要用is判断也是足够安全的了