首页 / 知识
关于.net:在C#中,为什么不能列出< string>
2023-04-11 22:28:00

In C#, why can't a List<string> object be stored in a List<object> variable似乎列表对象不能存储在C中的列表变量中,甚至不能以这种方式显式转换。
导致无法隐式地将类型 然后。。。
导致无法将类型 当然,您可以通过从字符串列表中提取所有内容并一次将其放回一个列表中来完成,但这是一个相当复杂的解决方案。 这样想,如果您要进行这样的转换,然后将foo类型的对象添加到列表中,那么字符串列表就不再一致。如果要迭代第一个引用,则会得到类强制转换异常,因为一旦命中foo实例,就无法将foo转换为字符串! 作为旁注,我认为无论您是否可以进行反向转换,都将更加重要:
我有一段时间没有使用过C,所以我不知道这是否合法,但这种类型的演员表实际上(潜在)是有用的。在本例中,您将从一个更通用的类(对象)转到一个更具体的类(字符串),该类(字符串)从通用类扩展到更具体的类(字符串)。这样,如果您添加到字符串列表中,就不会违反对象列表。 是否有人知道或可以测试这样的演员是否合法? 如果您使用的是.NET 3.5,请看一下Enumerable.Cast方法。它是一个扩展方法,因此您可以直接在列表中调用它。
这不完全是你想要的,但应该做到这一点。 编辑:正如Zooba所指出的,然后可以调用ol.to list()以获取列表 不能在具有不同类型参数的泛型类型之间强制转换。专门化的泛型类型不构成同一继承树的一部分,因此是不相关的类型。 要执行此3.5版之前的操作:
使用LINQ:
原因是像 因此,显然编译器不够聪明,无法通过强制转换内部集合的项将ListString转换为ListObject。 这就是为什么存在类似于convert()的IEnumerable扩展方法,它允许您轻松地为集合中存储的项提供转换,这与从一个集合到另一个集合的转换一样简单。 这与协方差有很大关系,例如,将泛型类型视为参数,如果参数不能正确解析为更具体的类型,则操作失败。这意味着,您实际上无法强制转换为更一般的类对象类型。如rex所述,list对象不会为您转换每个对象。 您可能希望尝试使用FF代码:
或:
从理论上讲,ol会毫无问题地复制sl的所有内容。 是的,您可以从.NET 3.5:
迈克-我相信在C中也不允许有矛盾。 有关更多信息,请参见clr中的泛型类型参数方差。 我认为C 4.0中会支持这一点(相反)。http://blogs.msdn.com/charlie/archive/2008/10/27/linq-farm-covariance-and-contravariance-in-visual-studio-2010.aspx 不支持泛型上的此类协方差,但实际上可以对数组执行此操作:
C执行运行时检查,以防止将 实际上,这样就不会试图在"ol"列表变量中放入任何奇怪的"object"(如 在Java上,反过来说,你没有泛型,而在运行时,所有的东西都是对象列表,而且你真的可以在你所谓的严格类型化的列表中填入任何奇怪的对象。搜索"泛化泛型",以查看对Java问题的更广泛的讨论…
嗯,多亏了之前的评论,我找到了两种方法来找到它。第一种方法是获取元素的字符串列表,然后将其转换为IEnumerable对象列表:
第二种方法是避免IEnumerable对象类型,只需将字符串强制转换为对象类型,然后在同一句话中使用函数"tolist()":
我更喜欢第二种方式。我希望这有帮助。 我有一个:
我准备用一个
对于任何内容可以隐式强制转换的IList,这是另一个.NET 3.5之前的解决方案。
(基于Zooba的例子) |
最新内容
相关内容
python如何确定是否为可迭代对象
python如何确定是否为可迭代对象,培训,元素,索引,对象,整数,字典,函数,类型,下标,模块,迭代可以理解为,任意的集合使用for循环遍历python中,迭python如何打印列表长度
python如何打印列表长度,培训,技术,概念,项目,列表,长度,数组,方法,鲜为人知,初始化,首先,我们需要明确的一点就是Python是没有数组这一概念的python如何打印列表
python如何打印列表,代码,培训,列表,参数,语句,结果,定义,切片,函数,后面,Python列表的打印方法如下我们知道,Python打印列表一般是要用for…ipython怎么判断某一对象是否为字典
python怎么判断某一对象是否为字典,培训,名称,代码,情况,类型,实例,元素,字典,函数,对象,我们经常需要在Python代码中确定某个实例是什么类型python如何查看对象属性
python如何查看对象属性,培训,网络,系统,函数,对象,属性,变量,示例,实例,模块,在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要python字符串是对象吗
python字符串是对象吗,培训,名称,设计,对象,函数,变量,实体,参数,物件,字符串,python中一切都是对象在python中下列语句其实都是一个共同点:i=python如何判断对象是否有某个属性
python如何判断对象是否有某个属性,培训,名称,异常,对象,属性,特性,参数,方法,函数,定义,python如何判断某一对象是否有某一属性,可以使用hasapython如何定义列表
python如何定义列表,数据,培训,列表,一致,工厂,合法,名称,数组,元素,类型,在实际开发中,经常需要将一些(不只一个)数据暂储起来,以便将来使用。python列表怎么倒序
python列表怎么倒序,培训,函数,排列,方式,列表,升序,方法,下面,以上,代表,python使列表倒序排列的方法有很多,下面说一下具体的方法方式一:使python如何实现对Python中列表的排
python如何实现对Python中列表的排序?,培训,工作,实例,方法,关键字,对象,函数,以上,列表,表达式,对List进行排序,Python提供了两个方法方法1.python在python中如何同时给多个变
python在python中如何同时给多个变量赋值?,培训,连续,名称,赋值,变量,函数,模块,整数,定义,常量,同时赋多个值以下是一种很酷的编程捷径:在Pytpython什么是面向对象
python什么是面向对象,概念,软件,设计,培训,数据,分析,状态,系统,统一,对象,python的面向对象的思维解决问题的重点当遇到一个需求的时候不用