首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中,为什么List <string>对象不能存储在List <object>变量中

在C#中,List<string>对象不能存储在List<object>变量中,是因为这两个类型之间存在类型安全的限制。C#是一种静态类型语言,它在编译时期就会检查类型的正确性。

List<string>List<object>是两种不同的泛型类型,它们分别表示一个字符串列表和一个对象列表。尽管string类型是object类型的子类型,但是List<string>List<object>之间的类型却不兼容。这是因为List<T>类型是不可变的,它的泛型参数T在编译时期就已经确定了。

如果你想将List<string>对象存储在一个通用的对象列表中,可以将List<string>对象转换为List<object>对象,可以使用以下代码:

代码语言:csharp
复制
List<string> stringList = new List<string>();
// 添加字符串到stringList
List<object> objectList = stringList.Cast<object>().ToList();

这里使用了Cast<T>方法将List<string>对象转换为List<object>对象。Cast<T>方法是LINQ中的一个扩展方法,它可以将一个类型为IEnumerable<T>的对象转换为另一个类型为IEnumerable<T>的对象。

总之,List<string>对象不能存储在List<object>变量中,因为它们是不同的泛型类型。但是,你可以使用Cast<T>方法将List<string>对象转换为List<object>对象,以便在通用的对象列表中存储字符串对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VB.netList(of string())与List(of List(of string))有什么区别

VB.netList(of string())与List(of List(of string))有什么区别 (1)List(of string())与List(of List(of string)...)区别 VB.NETList(Of String()) 和 List(Of List(Of String))  是两种不同的数据结构,它们分别表示: 1. ...({row1, row2}) 总结来说:1.List(Of String())` 适用于需要存储多个不相关联的字符串数组的场景。...(2)VSTO外接ExcelList(of List(of string))如何输出到Excel工作表 VB.NET的VSTO外接程序,如果您有一个`List(Of List(Of String...然后,遍历列表的每一项(每一项代表一行),并在Excel工作表对应的位置写入数据。 请注意,与COM对象交互后释放资源是很重要的,以避免内存泄漏。

37410

C#如何List去除重复元素?

List中有两个一样的元素,想把两个都去除,用remove和removeall都不行,list对象,distinct好像也不太好使,还请各位帮忙解答一下。... edges = new List(); 经过计算后edges中有一些edge对象,有些对象是相同的线段,但是首尾可能相反,如何判断是相同的线段,并且将两个相同的都删除?...List就可以使用Distinct去重 { public string name { get; set; } string address; public User...(string _name, string _address) { name = _name; address = _address; }...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

2.4K20
  • VB.net List(of string())与Arr(,)有什么区别

    VB.net List(of string())与Arr(,)有什么区别 (1)List(of string())与Arr(,)有什么区别 VB.NETList(Of String()...一旦创建,它的大小就不能改变。 2.动态性:a.List(Of String()): 由于是动态集合,你可以很容易地添加、删除或修改其中的元素。...5.使用场景:a.如果你需要一个能够动态改变大小的数据结构来存储字符串数组,那么List(Of String())可能是更好的选择。...(2)VSTO外接ExcelList(of string())如何输出到Excel工作表 VB.net,要将List(Of String())快速输出到Excel工作表,您可以使用Microsoft...您可以通过Visual Studio打开项目属性,选择“引用”,然后添加对Microsoft Excel Object Library的引用来完成此操作。

    29310

    面试题53(考察求职者对String声明变量jvm存储方法)

    (单选题) 1、有如下一段代码,请选择其运行结果() public class StringDemo{ private static final String MESSAGE="taobao";...public static void main(String [] args) { String a ="tao"+"bao"; String b="tao"; String...声明变量jvm存储方法 出现频率:★★★★★ 【面试题分析】 String a="tao"; String b="bao"; String c="taobao"; a,b,c,都是存在字符串常量池中的...="tao"+"ba"+"o"; 现在字符串常量池中查找“taoba” 若有则直接引用 若没有则构造一个放在该池中,然后判断是有“taobao”过程和前面一样至于String f=a+b;实际等效于...Stringf=newString("taobao");存在在堆内存 所以不相等 所以参考答案是 (C)

    1.6K30

    为什么Java类的成员变量不能被重写?成员变量Java能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

    这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量Java能够被重写么?...我们看下面这个例子,我们创建了两个子对象,一个使用的是子对象的引用,一个使用的是父对象的引用。...这是为什么呢?...意思就是: 一个类,子类的成员变量如果和父类的成员变量同名,那么即使他们类型不一样,只要名字一样。父类的成员变量都会被隐藏。子类,父类的成员变量不能被简单的用引用来访问。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。

    3.5K40

    C#透彻解析数组、ArrayList和List的区别

    C#数组,ArrayListList都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组 数组C#中最早出现的。...ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,声明ArrayList对象时并不需要指定它的长度。...装箱与拆箱的概念: 简单的说: 装箱:就是将值类型的数据打包到引用类型的实例 比如将int类型的值abc赋给object对象obj int i=123; object obj=(object...)i; 拆箱:就是从引用数据中提取值类型 比如将object对象obj的值赋给int类型的变量i object obj=”abc”; int i=(string)obj; 装箱与拆箱的过程是很损耗性能的...//移除数据 list.RemoveAt(0); 上例,如果我们往List集合插入int数组123,IDE就会报错,且不能通过编译。

    1.3K30

    C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

    第一次接触泛型那还是大二上学期的时候,那会是学c#面向对象的时候接触过泛型集合,但尴尬的是那会还没有“泛型”这个概念,仅仅只停留在泛型集合的使用。...泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。 泛型的定义主要有以下两种: 1.程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。...list2.Add("詹姆斯"); ArrayList是一个极为方便的集合类,可以用于存储任何引用或值类型。...###常见的泛型类型### 泛型类型的定义,出现的每个T(一个展位变量而已叫别的名字也行)在运行时都会被替换成实际的类型参数。...###泛型类型参数约束### 为什么要使用类型参数的约束呢,简单点说就是筛选类型参数,使用泛型的代码如果违反了某个约束不允许的类型来实例化则会产生编译错误,类型参数的约束是使用关键字where。

    2.5K30

    C#数组、ArrayList和List的区别

    C#,数组、ArrayList、List都能够存储一组对象,那么他们的区别是什么呢? Array 数组在内存是连续存储的,所以它的索引速度非常快,而且赋值和修改元素也很简单。...同时继承了IList接口,提供了数据检索和存储。ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。...最关键的区别在于,声明List集合时,我们同时需要为其声明List集合内数据的对象类型 List foo = new List(); // 增加 foo.Add("Hello...String数组Hello,IDE就会报错,且不能通过编译。...特定类型(Object除外)的数组的性能优于ArrayList的性能。这是因为ArrayList的元素属于Object类型;所以存储或检索值类型时通常发生装箱和取消装箱操作。

    27430

    C# 学习笔记(15)—— C# 4.0

    如下面代码定义的方法就包含3个参数,一个必备参数和两个可选参数 static void Test(int x, int y = 10, string name = "") { } 以上代码,参数...我们知道,面向对象的继承中就蕴含可变性,当方法声明返回的类型为Stream时,可以实现返回一个FileStream类型,这里就存在一个隐式转换。...C# 2.0 确实是不支持的,但因为有了这样的需求,微软便适应地做出了改进, C# 4.0 引入了泛型的协变性和逆变性 协变性 协变性指的是泛型类型参数可以从一个派生类隐式地转换为基类 C# 4.0...(如Func、Action),类或泛型方法的类型参数都不支持协变和逆变 协变和逆变只适用于引用类型,值类型不支持协变和逆变(因为可变性存在引用转换的过程,而值类型变量存储的就是对象本身...,并不是对象的应用),所以List无法转换为IEnumerable 必须显示地使用in或out来标记类型参数 委托的可变性不要在多播委托中使用

    24720

    数组、List和ArrayList的区别

    数组、List和ArrayList的区别 数组在内存是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如: string[] s=new string[3]; //赋值 s[...C#中最先提供了ArrayList对象来克服这些缺点。   ...list,我们不仅插入了字符串"abc",而且又插入了数字123。这样ArrayList插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。...int i=123; object o=(object)i;      拆箱:就是从引用数据中提取值类型 比如将object对象o的值赋给int类型的变量i                     object...(0);   上例,如果我们往List集合插入string字符"hello world",IDE就会报错,且不能通过编译。

    4.7K30

    C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)

    值类型和引用类型 C#值类型数据直接在他自身分配到的内存存储数据,而C#引用类型只是包含指向存储数据位置的指针。  ...第二类:结构类型:就是 struct 型   第三类:枚举类型:就是 enum 型 C#引用类型有五种:class、interface、delegate、objectstring、Array。...值类型和引用类型赋值(或者说复制)的时候也是有区别的。值类型数据赋值的时候是直接复制值到新的对象,而引用类型则只是复制对象的引用。 最后,值类型存在堆栈上,引用类型存储托管堆上。...栈(Stack)和堆(Heap) Stack是指堆栈,Heap是指托管堆,C#的叫法应该是这样的。 1、堆栈stack:堆栈存储值类型。   ...以上例子可以看出,建议引用变量的过程比建立值变量的过程复杂的多,且不能避免性能的降低-.NET运行库需要保持堆的信息状态,堆添加新数据时,这些信息也需要更新(这个会在堆的垃圾收集机制中提到)。

    1.1K10

    C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)

    值类型和引用类型 C#值类型数据直接在他自身分配到的内存存储数据,而C#引用类型只是包含指向存储数据位置的指针。  ...第二类:结构类型:就是 struct 型   第三类:枚举类型:就是 enum 型 C#引用类型有五种:class、interface、delegate、objectstring、Array。...值类型和引用类型赋值(或者说复制)的时候也是有区别的。值类型数据赋值的时候是直接复制值到新的对象,而引用类型则只是复制对象的引用。 最后,值类型存在堆栈上,引用类型存储托管堆上。...栈(Stack)和堆(Heap) Stack是指堆栈,Heap是指托管堆,C#的叫法应该是这样的。 1、堆栈stack:堆栈存储值类型。   ...以上例子可以看出,建议引用变量的过程比建立值变量的过程复杂的多,且不能避免性能的降低-.NET运行库需要保持堆的信息状态,堆添加新数据时,这些信息也需要更新(这个会在堆的垃圾收集机制中提到)。

    1.2K41

    C# 学习笔记(11)—— C# 的春天

    } 为什么说用 var 定义的变量对于编译器来说还是显示类型呢?...C# 是静态语言,变量类型位置就会出现编译时错误 变量不能初始化为 null,因为 null 可以隐式地转换为任何引用类型或可空类型,编译器将不能推断出该变量到底为什么类型 不能用 var 来声明方法的参数...C# 3.0 提供了对象初始化器,它减少了我们定义的构造函数代码,从而使代码更加简洁。...集合初始化器提出之前,你可能用下面的方式来初始化集合对象: static void Main(string[] args) { var list = new List(); list.Add...) { var list = new List() { "Carl", "Karl" }; } 编译器处理集合初始化时,就是调用了 List 的 Add 方法,将对象一个个地添加到了集合对象

    17310

    2022年Unity面试题分享

    ====》值类型 1.检查确保对象是给定值类型的一个装箱值 2.将该值数据复制到栈的值类型 string是特殊的引用类型,如果传入参数是string方法里修改,原string数值不变。...) 性能优化的点 ---- 10、字符串比较 先用string 变量存储 obj.name ,这用只有一个内存空间保存 如果不存储 obj.name每一次比较都会产生新的内存空间、 比较obj.tag...15、类的构造函数前加上 static 会报什么错?为什么?...,特性,动态扩容,泛型安全 将泛型数据(对值类型来说就是数据本身,对引用类型来说就是引用)存储一个泛型数组,添加元素时若超过当前泛型数组容量,则以2倍扩容,进而实现List大小动态可变。...存在 a引用地址在线程栈,数据内容托管堆 b引用地址在线程栈,数据内容指向A的托管堆的内容 B删除,只是删除b的引用地址 ---- 【重点面试题】29、C#引用和C++指针的区别 C#

    4K11

    迭代器模式

    迭代器模式的定义 提供一种统一的方法遍历一个集合的各个元素,而不关心集合的内部实现。 迭代器模式的目的 面向对象编程里,迭代器模式是一种最简单也最常见的设计模式。...因为需要接口编程,所以,迭代器模式,抽象了2个接口,一个是集合接口,另一个是迭代器接口,具体的角色如下: 1.抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口....NET Framework迭代器模式的应用 C#的foreach语句其实就是迭代器模式。任何可以使用foreach进行遍历的对象,它一定是实现了IEnumerable接口。...相反,会将调用的控制权返回到elements变量foreach循环迭代时,将调用elements的MoveNext方法。...迭代器模式的使用感受 迭代器模式是与集合类紧密绑定在一起的,一般来说,我们只要实现一个集合类,就应该同时提供这个集合的迭代器,就像C#的Collection,List、Set、Map等,这些集合都有自己的迭代器

    64730
    领券