首页 新闻 搜索 专区 学院

对C#的这个代码有一些疑问,请博友帮我开导一下,谢谢

0
悬赏园豆:20 [已解决问题] 解决于 2014-12-17 10:50

先贴代码,疑问在下面

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Linq;
 5 using System.Web;
 6 
 7 namespace t1_NewsInfo_crud
 8 {
 9     /// <summary>
10     /// List 的摘要说明
11     /// </summary>
12     public class List : IHttpHandler
13     {
14 
15         public void ProcessRequest(HttpContext context)
16         {
17             string sql = "select * from newsInfo n1 left join typeinfo t1 on n1.TypeId=t1.TypeId";
18             DataTable dt = SqlHelper.ExecuteList(sql);
19 
20             List<NewsInfo> list1=new List<NewsInfo>();
21             foreach (DataRow dataRow in dt.Rows)
22             {
23                 list1.Add(new NewsInfo()
24                 {
25                     NewsId = Convert.ToInt32(dataRow["NewsId"]),
26                     NewsTitle = dataRow["NewsTitle"].ToString(),
27                     SubTime = Convert.ToDateTime(dataRow["SubTime"]),
28                     TypeId = Convert.ToInt32(dataRow["TypeId"]),
29                     TypeTitle = dataRow["TypeTItle"].ToString()
30                 });
31             }
32 
33             RazorHelper.Render("list.html",list1,null);
34         }
35 
36         public bool IsReusable
37         {
38             get
39             {
40                 return false;
41             }
42         }
43     }
44 }


(1)在第23行代码 new NEWSINFO(){}  这个是什么含义? 能理解为调用的类的初始化器吗?

(2)还是23行, list1.add()  这里不理解,是在向泛型集合中添加类的构造器吗?

  ----------------------------------------------------------

像以下代码,我明白将对象加入泛型集合:

List<Person> persons = new List<Person>();

  Person p1 = new Person("张三"30);
Person p2 
= new Person("李四"20);
Person p3 
= new Person("王五"50);

  persons.Add(p1);
persons.Add(p2);
persons.Add(p3);

----------------------------------------------------------

请能看明白以上代码含义的朋友帮我解惑一下, 不胜感激~!

蜗牛阿布的主页 蜗牛阿布 | 初学一级 | 园豆:138
提问于:2014-12-17 09:37
< >
分享
最佳答案
0

23行到30行,换种写法或许你就能理解了:

NewsInfo news = new NewsInfo();
news.NewsId = Convert.ToInt32(dataRow["NewsId"]);
news.NewsTitle = dataRow["NewsTitle"].ToString();
news.SubTime = Convert.ToDateTime(dataRow["SubTime"]);
news.TypeId = Convert.ToInt32(dataRow["TypeId"]);
news.TypeTitle = dataRow["TypeTItle"].ToString();
list1.Add(news);

或者更贴近你能理解的:

NewsInfo news = new NewsInfo(){
    NewsId = Convert.ToInt32(dataRow["NewsId"]),
    NewsTitle = dataRow["NewsTitle"].ToString(),
    SubTime = Convert.ToDateTime(dataRow["SubTime"]),
    TypeId = Convert.ToInt32(dataRow["TypeId"]),
    TypeTitle = dataRow["TypeTItle"].ToString()
};
list1.Add(news);
收获园豆:5
瀟X謝 | 菜鸟二级 |园豆:221 | 2014-12-17 09:52

感谢答复

蜗牛阿布 | 园豆:138 (初学一级) | 2014-12-17 10:51
其他回答(3)
0

如果拆成这样也许你就知道了。

NewsInfo   news_=new NewsInfo()
              {
                     NewsId = Convert.ToInt32(dataRow["NewsId"]),
                    NewsTitle = dataRow["NewsTitle"].ToString(),
                    SubTime = Convert.ToDateTime(dataRow["SubTime"]),
                     TypeId = Convert.ToInt32(dataRow["TypeId"]),
                    TypeTitle = dataRow["TypeTItle"].ToString()
                };//这里是实例化的时候,赋值!原理和下面这个一样

 

NewsInfo   news_=new NewsInfo();
             
                     news_.NewsId = Convert.ToInt32(dataRow["NewsId"]);
                    news_.NewsTitle = dataRow["NewsTitle"].ToString();
                    news_.SubTime = Convert.ToDateTime(dataRow["SubTime"]);
                     news_.TypeId = Convert.ToInt32(dataRow["TypeId"]);
                    news_.TypeTitle = dataRow["TypeTItle"].ToString();
               

 List<NewsInfo> list1=new List<NewsInfo>();

list1.add(news_);

这个list里放的就是你这个实体模型的集合!你绝对看得懂!

收获园豆:5
贫民窟大侠 | 园豆:4276 (老鸟四级) | 2014-12-17 09:43
0

1、你这个就是集合,不是泛型集合。 list1的类型是List<NewsInfo>,表示一个LIST,里面存放对象类型为NewsInfo的对象。

2、List1是一个集合,List1.add(Item),表示往集合里面加入一个元素。(此处为NewsInfo类型的对象)

3、

list1.Add(new NewsInfo()
            {
                 NewsId = Convert.ToInt32(dataRow["NewsId"]),
                 NewsTitle = dataRow["NewsTitle"].ToString(),
                 SubTime = Convert.ToDateTime(dataRow["SubTime"]),
                 TypeId = Convert.ToInt32(dataRow["TypeId"]),
                 TypeTitle = dataRow["TypeTItle"].ToString()
                });
这个代码与下面是一样的
NewsInfo myItem =new NewsInfo(){
    NewsId = Convert.ToInt32(dataRow["NewsId"]),
    NewsTitle = dataRow["NewsTitle"].ToString(),
    SubTime = Convert.ToDateTime(dataRow["SubTime"]),
    TypeId = Convert.ToInt32(dataRow["TypeId"]),
    TypeTitle = dataRow["TypeTItle"].ToString()
};
list1.add(myItem);
收获园豆:10
爱编程的大叔 | 园豆:30768 (高人七级) | 2014-12-17 09:45

你回答的第二项

list1.Add()     <---这个括号里面 直接是 new NewsInfo()  这个类   而不是实例化的对象

一般对象实例化是

Class A = new Class(){}   这样   将A加进集合嘛,而这个案例中 直接写new NewsInfo() 

我就有点糊涂了,不清楚他们之间有什么区别

感谢你耐心回复 

支持(0) 反对(0) 蜗牛阿布 | 园豆:138 (初学一级) | 2014-12-17 09:49

@蜗牛阿布: 这个就是微软大神搞出来的。

他们不想写两行代码。

你现在基础知识一塌糊涂的样子,看不懂你就别用好了,用回你看得懂的。

另外,多看书,不求甚解...  有些东西就是约定。

比如你女朋友说老地方见,你要是不知道哪儿是老地方,

为什么是老地方,那就没有办法了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30768 (高人七级) | 2014-12-17 09:53

@爱编程的大叔: 

你说的很对。

我基础知识不好,但是我尽可能的多看去理解了。这需要过程。

我们掌握的知识分量不同,站的高度不一样,角度就不一样。

感谢你的答复,说到了我问题点子上。

通过询问和推敲,我现在理解为是向集合中添加匿名对象,这个对象用到了类的初始化器。

支持(0) 反对(0) 蜗牛阿布 | 园豆:138 (初学一级) | 2014-12-17 10:49
0

给自己的类起个名字叫list,就真以为自己是list了

吴瑞祥 | 园豆:29321 (高人七级) | 2014-12-17 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册