首页 新闻 会员 周边

关于C#泛型的一个问题 请教

0
悬赏园豆:100 [已关闭问题]

是这样

List<myclass> classlist = new List<myclass>();

Object _obj = classlist as Object;

int i = doObject(_obj);

 

 

public intdoObject(Object _obj){

  返回classlist的count

}

问题补充: doObject的时候不知道classlist的类型 只知道是泛型的集合
Shinspirit的主页 Shinspirit | 初学一级 | 园豆:100
提问于:2008-11-17 17:18
< >
分享
其他回答(5)
0

classlist.Count 可以直接取到,你还需要什么intdoObject()?

West | 园豆:1095 (小虾三级) | 2008-11-17 17:22
0

List classlist<myclass> = new List<myclass> ();

int i = doObject(classlist);

public intdoObject<T> (List<T> _obj){

  return _obj.Count;

}


    其实不该多嘴。

    楼主到底要做什么?如果是明知参数 _obj 有 Count 属性而强制返回,就用 eagle 的接口方法(也就是is 加 as 转换的方法);若其未实现 ICollection 等接口,或许用反射(xxx.Invoke())可以实现。

    _obj 总有个实际类型啊,如果编码的时候能够给已有类型分类,那么用类似如下

           if(_obj is ICollection){

           }

           else if(_obj is ICollection){

           }

            ....

有何不可的。用反射大概性能会是问题,但个人没用过,也不好乱说。

    不知道你的原题中“泛型”字眼的出现到底为何,既然未知类型,为什么提“泛型”?

陛下 | 园豆:3938 (老鸟四级) | 2008-11-17 17:24
0

建议这样做,既然你传进来的是集合,那就用 ICollection接口来判断就可以了,你的代码我用这种方法测试了一下是没有问题的,如果你传 Dictionary, Array 之类的满足集合接口的类或者泛型,也一样可以。

 

        public int doObject(Object _obj)
        {
            if (_obj is System.Collections.ICollection)
            {
                return ((System.Collections.ICollection)_obj).Count;
            }

            throw new ArgumentException("obj isn't ICollection");
        }

eaglet | 园豆:17139 (专家六级) | 2008-11-17 17:53
0

xuexi

Jared.Nie | 园豆:1940 (小虾三级) | 2008-11-18 12:24
0

> doObject的时候不知道classlist的类型 只知道是泛型的集合
所以应该用泛型集合作为参数类型啊
public int doObject(ICollection<myclass> arg){
    // 返回classlist的count
    return arg.Count;
}
调用
int i = doObject(classlist);

1-2-3 | 园豆:200 (初学一级) | 2008-11-18 13:23
0

Code

李潘 | 园豆:319 (菜鸟二级) | 2008-11-30 08:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册