请问下,C#的泛型数组中的 ToDictionary 方法怎么用? 详细说明请进。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问下,C#的泛型数组中的 ToDictionary 方法怎么用? 详细说明请进。。相关的知识,希望对你有一定的参考价值。

就是

Dictionary <int, class1> array1 = new Dictionary <int, class1>();

........怎么使用ToDictionary 方法再创建出一个和array1 元素相同的数组 ?

请教一下,ToDictionary 的用法。谢谢。

我看不懂MSDN 上的解释, 能不能就我上面说的情况,给我个例子?

参考技术A lz,对于需要被复制的Dictionary的value对象,首先是要有一个int类型的字段的,例如
class a

public int num;

在使用ToDictionary的时候,参数就是(p=>p.num);这个p就是一个class a的一个实例化的形式参数。追问

非常感谢,我是新手,很有启发那。。!
"=>" 符号是什么意思?
对的,有字段,比如字段是 public int num, 可以这样写吗?
Dictionary array1 = new Dictionary ();
array1.ToDictionary(p=>p.num, ?????这后面该怎么写??

追答

先说第一个,这个函数本来的参数是一个Func类型的,这个Func类型的参数我在msdn上看的应该是一个能将Key值从class对象中取出来的方法,这个=>完成的应该是这个功能,我找了很多地方,也没有找到对=>的具体解释,实在不好意思。
第二个,这个方法有四个重载,就是说,ToDictionary对于四种不同的参数都能实现,lz问的这个,应该是它的第二个重载,就是在参数里面有一个比较器,是IEqualityComparer类型的泛型接口,使得key值能够比较(因为你指定的key不一定是string、int或者常见的可比较的类型),使用它,可以让key在比较的时候能够更具你重写的方法来进行比较。

参考技术B msdn上有详细的介绍:
http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.todictionary.aspx

几个重载方法中这个最常见:
http://msdn.microsoft.com/zh-cn/library/bb549277.aspx追问

非常感谢!
我看不懂MSDN 上的解释, 能不能就我上面说的情况,给我个例子?

追答

ToDictionary 就应该是数组转Dictionary
要Dictionary转数组,就你上面的例子,只能放在两个泛型数组当中(如果Dictionary 的int类型Key,不是class1类型Value的属性的话)。
List list1=new List ();
List list2=new List();
foreach(KeyValuePair kv in array1 )

list1.Add(kv.Key);
list2.Add(kv.Value);

追问

谢谢!能不能在教教我,

那分成了连个List 之后,怎么才能合并成一个dictionary呢?

合并之后, dictionary 元素的 key 和 value 会不会乱掉?能完全和array1 相同吗?

追答

因为都是从dictionary得到的值 所以两个List的数量是一样,所以可以用如下方法
for(int i=0;i"符号是Linq的Lambda表达式
以它举出的class a 为例
List lista=new List();
Dictionary array1 = new Dictionary ();
array1=lista.ToDictionary(p=>p.num);
表示遍历p(即lista,将lista里面的项复制给array1的value,并将p.num复制给key)

本回答被提问者采纳

c#中的泛型

定义:

泛型:将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型

为使用c#语言编写面向对象程序增加了极大的效率和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。


1.List<T>泛型

  1. List<int> ll = new List<int>();
  2. ll.Add(3);
  3. ll.Add(4);
  4. //ll[0] = 1; 不能用这种声明方法
  5. List<string> ss = new List<string>() { "jing", "dong", "yun" };
可以使用两种方法来遍历输出
  1. foreach (var item in ss)
  2. {
  3. Console.WriteLine(item);
  4. }
  5. for (int j = 0; j < 3; j++)
  6. {
  7. Console.WriteLine(ss[j]);
  8. }


泛型也是一样。in 关键字表示可能逆变,out 关键字表示可能协变。


5种泛型约束

1.基类约束【类型参数必须是BaseClass或者是其子类】

class A<T> where T : BaseClass { }

2.接口约束【类型参数必须是实现了IPrint接口的类型】

class B<T> where T : IPrint { }

3.构造器约束【类型参数必须是有一个无参的构造器的类型】

class C<T> where T : new( ) { }

4.值类型 / 引用类型约束【类型参数必须是引用类型】

class D<T> where T : class { }

5.值类型 / 引用类型约束【类型参数必须是值类型

class E<T> where T : strct { }












以上是关于请问下,C#的泛型数组中的 ToDictionary 方法怎么用? 详细说明请进。。的主要内容,如果未能解决你的问题,请参考以下文章

请问C#中有没有判断数组元素重复,或如何去除重复呀?

如何在 C# 的泛型中使用扩展

C#中的泛型是啥意思?

C# 使用自定义的泛型函数/方法对泛型数组进行四则运算

c#中的泛型

C# 中的泛型与非泛型性能