你们能看懂这个c#的方法名吗??

woodyy 2008-11-14 09:51:35
public static IList<IT> ToList<T, IT>(this DataSet dataSet) where T : IT, IMapping, new()
{
if (NullManager.DataSetIsNull(dataSet))
{
return new List<IT>();
}

IList<IT> list = new List<IT>();
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
T t = new T();
t.MappingFromDataRow(dataSet.Tables[0].Rows[i]);

list.Add(t);
}

return list;
}


为什么这个方法名是这样的:
public static IList<IT> ToList<T, IT>(this DataSet dataSet) where T : IT, IMapping, new()

我就看懂范型了。
一,请问(this DataSet dataSet)
为什么参数里要加this呀。

二,请问那个where T : IT是啥东西

三,请问IMapping是啥东西

四,请问new()是啥东西

十分感谢
...全文
166 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
woodyy 2008-11-14
  • 打赏
  • 举报
回复
谢谢,sp。好像模模糊糊看明白一些,主要是以前没用过。

这个没有涉及到LINQ的东西吧
fjh525 2008-11-14
  • 打赏
  • 举报
回复
这是泛型的写法!
  • 打赏
  • 举报
回复
其实,既然程序中必须 new T(),那么没有必要再涉及 IT。

public static List<T> ToList<T>(this DataSet dataSet) where T : IMapping, new()
{
if (NullManager.DataSetIsNull(dataSet))
{
return new List<T>();
}

List<T> list = new List<T>();
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
T t = new T();
t.MappingFromDataRow(dataSet.Tables[0].Rows[i]);

list.Add(t);
}

return list;
}

泛型、扩展方法,都是让程序变得很精练的好方法。你没有看懂,可能是用的少的缘故。“看懂泛型了”不一定代表你看懂了泛型,会用之后才能说看懂了(一本小说你每一个字都认识但是看不懂完整的故事又有什么用)。

1. 对于扩展方法,将来所有的DataSet就天然地增加了一个ToList方法,就好像.net framework类库中天然地有这个方法一样。调用时可以写:

DataSet ds;
......
IList<MyClass> result=ds.ToList<MyClass>();

2. IT似乎多余,增加复杂性。

3. 定义了 MappingFromDataRow 接口方法。编译器会自动检验调用时的类型参数有没有 IMapping 接口,也就是有没有实现 MappingFromDataRow 方法(类型必须实现接口中的所有方法)。

4. 类似于3,编译器要检验调用时的类型参数有没有默认的实例化(.ctor)方法。因为代码中要 new T() 嘛。c#是编译时强类型的语言,如果编译器无法推断出 T 具有实例化方法,就无法编译通过。
Jack123 2008-11-14
  • 打赏
  • 举报
回复
UP
  • 打赏
  • 举报
回复
没见过这种写法阿。。。。。学习。。。。
wo6522317 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
类型参数 T 实现 IT, IMapping, new()接口
new创建类型参数实例

[/Quote]
参数类型实现 new() 接口?写错了.
wo6522317 2008-11-14
  • 打赏
  • 举报
回复
第一个问题:
在方法的第一个参数前面多了一个this关键字叫扩展方法:
1 方法所在的类必须是静态的
2 方法也必须是静态的
3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
4 在第一个参数前面还需要有一个this关键字。
jiang_jiajia10 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
类型参数 T 实现 IT, IMapping, new()接口
new创建类型参数实例
[/Quote]
UP
wuyq11 2008-11-14
  • 打赏
  • 举报
回复
类型参数 T 实现 IT, IMapping, new()接口
new创建类型参数实例
woodyy 2008-11-14
  • 打赏
  • 举报
回复
自己顶下
ErnestChen2go 2008-11-14
  • 打赏
  • 举报
回复
学习中!
chinaxc 2008-11-14
  • 打赏
  • 举报
回复
晕。
wfyfngu 2008-11-14
  • 打赏
  • 举报
回复
其实就是3.0中的所谓 “扩展方法”
只是和泛型连在一起使用,很容易让人误解。
下面对 int 的扩展就清晰多了

public static int ANewMethodOfInt(this int i){
return i++;
}


顺便说下,sp1234的回答更是让人一头雾水
难道技术好的人语言也变得晦涩?
sunshine_anycall 2008-11-14
  • 打赏
  • 举报
回复
好东西啊,
谢谢楼主提问,谢谢sp回答,谢谢cctv,谢谢mtv
呵呵
woodyy 2008-11-14
  • 打赏
  • 举报
回复
http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx

硬着头皮看完这个,很好很强大

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧