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()是啥东西十分感谢
{
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()是啥东西十分感谢
解决方案 »
- 求一关于字符串查找的正则.!
- 菜鸟问一个onclick的问题
- AJAX的ModalPopup 上再弹MESSAGE的问题!!
- 谁知道哪儿有把变量写进数据的语法教程啊?
- request.form 错误
- frame 里去FreeTextBox的Text 值的问题
- |M| ASP.NET C#中用什么来计算两个日期的年差和月差,我用TimeSpan好像只有日差和时差
- 问一个权限的问题!我想通过某个页面然后才可以访问其他页面
- TextBox我设置了MaxLenght=240,为什么还是可以输入超过240个字符呢?
- ■■打开一全屏窗口(fullscreen=yes),并控制窗口最大为1024*768,可以吗?■■
- 学校服务器是1.X的,但我做的是2.0的,在服务器上无法显示,怎么办?
- 急,两个关于字符串的问题,马上结帐
new创建类型参数实例
在方法的第一个参数前面多了一个this关键字叫扩展方法:
1 方法所在的类必须是静态的
2 方法也必须是静态的
3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
4 在第一个参数前面还需要有一个this关键字。
{
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 具有实例化方法,就无法编译通过。
谢谢楼主提问,谢谢sp回答,谢谢cctv,谢谢mtv
呵呵
只是和泛型连在一起使用,很容易让人误解。
下面对 int 的扩展就清晰多了public static int ANewMethodOfInt(this int i){
return i++;
}顺便说下,sp1234的回答更是让人一头雾水
难道技术好的人语言也变得晦涩?