C# 为什么对象不知道自己的索引?

C# 为什么对象不知道自己的索引?,c#,C#,我们如何从元素本身知道列表元素的索引 例如,下面的代码将无法工作,因为s没有名为index的属性。但是有没有一种简单的方法来获取索引 我知道IndexOf和Find,但这不是我要找的东西。因为我们已经有了元素,它应该是类似于属性的东西来显示索引,对吗 私有列表myStr=。。。。。。 myStr中的foreach字符串s { 如果 { 返回s.index; } } 我知道IndexOf和Find,但这不是我要找的东西。因为我们已经有了元素,它应该是类似于属性的东西来显示索引,对吗 我理解为什么你

我们如何从元素本身知道列表元素的索引

例如,下面的代码将无法工作,因为s没有名为index的属性。但是有没有一种简单的方法来获取索引

我知道IndexOf和Find,但这不是我要找的东西。因为我们已经有了元素,它应该是类似于属性的东西来显示索引,对吗

私有列表myStr=。。。。。。 myStr中的foreach字符串s { 如果 { 返回s.index; } } 我知道IndexOf和Find,但这不是我要找的东西。因为我们已经有了元素,它应该是类似于属性的东西来显示索引,对吗

我理解为什么你会认为这是一个有用的东西,语言包括在内。但事实并非如此。对于任何给定的对象类型,该对象的实例可以存在,也可以不存在包含该对象的集合。事实上,单个实例可以位于多个集合中。例如,如果我有这样的东西:

字符串[]a1={1,2,3},a2={2,3,4}; 字符串元素=3; int i=元素索引; 你认为我的价值是什么?应该是2还是1

索引的确切需求因集合和其中的元素的使用方式而异。通常,集合很小,很少需要索引,因此可以对集合进行线性搜索。在其他情况下,只有在集合由于其他原因已经被迭代的同时才需要索引,因此索引自然可用

在这些不适用并且需要立即检索索引的场景中,还有其他选项。例如,可以初始化提供索引的词典:

字符串[]a={1,2,3}; 字典地图1= a、 选择,i=>new{Key=s,Index=i}.ToDictionaryx=>x.Key,x=>x.Index; 字符串元素=3; int i=map1[元素]; 或者,您可以使用或类似的策略将元素包装到一个对象中,该对象在集合中跟踪其索引


一句话:C语言没有直接从对象本身生成元素索引的方法,实际上也没有任何实际的方法,因为任何元素都可能有两个或多个索引,甚至根本没有索引,这取决于它包含在多少集合中。在特定的场景中,您可以使用其他方法来产生相同的结果。您对备选方案的选择将取决于每个场景的特定方面。

字符串只是一个字符串,无论您如何使用它—作为集合的元素、类的文件ID或作为独立字符串。根据使用上下文的不同,不会将任何属性附加到字符串数据类型。假设实际上有一个索引属性,并假设您从列表中删除元素s,然后调用s.Index;你希望它会回来什么?元素对列表一无所知。该列表了解有关其元素的内容。