classlist.Count 可以直接取到,你还需要什么intdoObject()?
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){
}
....
有何不可的。用反射大概性能会是问题,但个人没用过,也不好乱说。
不知道你的原题中“泛型”字眼的出现到底为何,既然未知类型,为什么提“泛型”?
建议这样做,既然你传进来的是集合,那就用 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");
}
xuexi
> doObject的时候不知道classlist的类型 只知道是泛型的集合
所以应该用泛型集合作为参数类型啊
public int doObject(ICollection<myclass> arg){
// 返回classlist的count
return arg.Count;
}
调用
int i = doObject(classlist);
Code