请问下,C#的泛型数组中的 ToDictionary 方法怎么用? 详细说明请进。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问下,C#的泛型数组中的 ToDictionary 方法怎么用? 详细说明请进。。相关的知识,希望对你有一定的参考价值。
就是
Dictionary <int, class1> array1 = new Dictionary <int, class1>();
........怎么使用ToDictionary 方法再创建出一个和array1 元素相同的数组 ?
请教一下,ToDictionary 的用法。谢谢。
我看不懂MSDN 上的解释, 能不能就我上面说的情况,给我个例子?
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在比较的时候能够更具你重写的方法来进行比较。
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>泛型
List<int> ll = new List<int>();
ll.Add(3);
ll.Add(4);
//ll[0] = 1; 不能用这种声明方法
List<string> ss = new List<string>() { "jing", "dong", "yun" };
foreach (var item in ss)
{
Console.WriteLine(item);
}
for (int j = 0; j < 3; j++)
{
Console.WriteLine(ss[j]);
}
泛型也是一样。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 方法怎么用? 详细说明请进。。的主要内容,如果未能解决你的问题,请参考以下文章