积极答复者
新手求助:很简单的问题

问题
-
namespace test
{
class Program
{
private class my_class : Object
{
public string s;
}static void Main(string[] args)
{
my_class x = new my_class();
List<my_class> my_list = new List<my_class>();
my_list.Add(x);my_func(my_list); //为什么这行会有错误?
}private static void my_func(List<Object> o)
{
;
}
}
}
答案
-
namespace test
{
class Program
{
private class my_class : Object
{
public string s;
}static void Main(string[] args)
{
my_class x = new my_class();
List<my_class> my_list = new List<my_class>();
my_list.Add(x);my_func(my_list); //为什么这行会有错误?
}private static void my_func(List<Object> o)
{
;
}
}
}mylist是List<my_class>类型,但是my_func的传参却要求是List<Object>类型,也就是说你要把List<my_class>=>List<Object>类型,这个在C#语法上显然是不行的(不要认为my_class是子类,object是父类哦!因为系统会以为如果你调用o.Add的方法需要一个object参数的实体类,这个类是五花八门的……比如string也可以传入)。但是string类不能存入List<my_class>中,存在强制转换错误问题。
解决方法:
private static void my_func(List<my_class> o)
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已编辑 ThankfulHeartModerator 2012年1月5日 5:00
- 已标记为答案 Bob ShenModerator 2012年1月16日 3:01
-
楼主的代码涉及到泛型的逆变和协变。目前,泛型里只有泛型委托和泛型接口支持逆变和协变T参数,而List<T>不支持,所以楼主的代码虽然逻辑上可行,但是实际上是不支持的。
如果楼主一定要那么做,可以这样变通一下:
my_func(my_list.OfType<Object>().ToList())
理解的越多,需要记忆的就越少- 已标记为答案 Bob ShenModerator 2012年1月16日 3:01
全部回复
-
-
namespace test
{
class Program
{
private class my_class : Object
{
public string s;
}static void Main(string[] args)
{
my_class x = new my_class();
List<my_class> my_list = new List<my_class>();
my_list.Add(x);my_func(my_list); //为什么这行会有错误?
}private static void my_func(List<Object> o)
{
;
}
}
}mylist是List<my_class>类型,但是my_func的传参却要求是List<Object>类型,也就是说你要把List<my_class>=>List<Object>类型,这个在C#语法上显然是不行的(不要认为my_class是子类,object是父类哦!因为系统会以为如果你调用o.Add的方法需要一个object参数的实体类,这个类是五花八门的……比如string也可以传入)。但是string类不能存入List<my_class>中,存在强制转换错误问题。
解决方法:
private static void my_func(List<my_class> o)
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已编辑 ThankfulHeartModerator 2012年1月5日 5:00
- 已标记为答案 Bob ShenModerator 2012年1月16日 3:01
-
楼主的代码涉及到泛型的逆变和协变。目前,泛型里只有泛型委托和泛型接口支持逆变和协变T参数,而List<T>不支持,所以楼主的代码虽然逻辑上可行,但是实际上是不支持的。
如果楼主一定要那么做,可以这样变通一下:
my_func(my_list.OfType<Object>().ToList())
理解的越多,需要记忆的就越少- 已标记为答案 Bob ShenModerator 2012年1月16日 3:01