戏子痴心猪
一头执着演着戏的猪···
posts - 4,  comments - 0,  trackbacks - 0

自打上次碰到这个“??”开始,老是碰到这个操作符,看样子,这个操作符有流行起来的趋势,所以先搞个笔记记下这个操作符的意义。

这个“??”操作符,其实就是用来简化“?:”操作符的,如果 ?? 运算符的左边非空,该运算符将返回左边的,否则返回右边的。

object a=null;
object b=a??new object();

如上例,最后返回的就是new object();等价于

object a=null;
object b=a==null?new object():a;

官方解释:http://msdn.microsoft.com/zh-cn/library/ms173224(v=VS.90).aspx

posted @ 2011-07-27 16:38 戏子痴心猪 阅读(143) 评论(0) 编辑
如上图,我模糊记得好像是hashtable是可以存一个'null'的key,值为'null'的键值对的,所以判断上面的那个是正确的···
然后看别人的,说,hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,不能直接判断···
接着又看到有人说,这两个都是错的,因为这两个都可以存一个键和值都为'null'的键值对···
这下我的脑袋瓜子彻底变浆糊了···
想起一句话,“实践出真知”,把代码敲出来运行了下下,嘿,事实证明,hashtable的判断是正确的,因为它出结果了,而dictionary<string,string>没有,可是为什么了?
我try{}catch{}了下下,发现,dictionary<string,string>抛出了一个KeyNotfoundException的异常,而且是 throw的,想了下,这可能是hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,上面题中,都只是声明而没有赋值,hashtable因为是存对象的,所以可以直接判断,dictionary<string,string>存的是引用,在找“name1”的引用是,发现不存在,所以就抛出了KeyNotfoundException异常。
总结:hashtable因为存的是对象,所以可以直接跟null判断,而dictionary<string,string>存的是引用,需要先判断查找的key是否存在,然后才能跟null判断。
刚又临时起意,给这个题目里的两个东东在声明之后,都添加一个了一个键值对,ht.Add("name1", null);和dt.Add("name2", null);,然后果然出现问题了,两个if判断里的东西都会执行了,这明显不是我们要的结果,name1和name2明明都存在的,结果这么一判断成不存在了,很复杂,感觉这题出的有问题了,我们应该是去判断这个键是否存在才是,ht.ContainsKey("name1")和dt.ContainsKey("name2")这样才是正解。--By 2011-4-27 14:00:00
                                                ----菜鸟见识,错者请指出
posted @ 2011-04-27 11:48 戏子痴心猪 阅读(110) 评论(0) 编辑

项目中用到过的一个比较实用的方法,在这里做个小小的笔记,方便以后使用。

 

代码
/// <summary>
/// 随机产生考场号
/// </summary>
/// <param name="start">初始值</param>
/// <param name="count">数量</param>
/// <returns></returns>
public static List<int> GetRandomList(int start, int count)
{
List
<int> list = new List<int>();
List
<int> temp = new List<int>();
for (int i = start; i < count + start; i++)
{
temp.Add(i);
}
Random ro
= new Random();

while (list.Count < count)
{
int a = ro.Next(0, temp.Count);
if (!list.Contains(temp[a]))
{
list.Add(temp[a]);
temp.Remove(temp[a]);
}
}
return list;
}

 

这个方法虽然是用的list,但是稍稍转换下,也可以用来生成数组。

posted @ 2011-01-31 10:23 戏子痴心猪 阅读(116) 评论(0) 编辑

第一次写博文哈···

这只是一个自己的方法笔记,用来从数据库读取数据,以绑定ASPxGridView的选择状态。

代码
private void SelectionState()
{
//根据条件从数据库读取数据,最后得到一个集合
td_examtype et = new td_examtype();
et.examtype_Profession
= cbProfession.SelectedItem.Value.ToString();
et.examtype_Type
= Convert.ToInt32(cbType.SelectedItem.Value) + 1;
et.examtype_Year
= DateTime.Now.Year.ToString();
List
<td_examtype> list = Bll_examtype.GetExamType(et);
//循环遍历ASPxGridView的行,匹配数据,如果成功,设置Selection,让这一行变成选中状态。
for (int i = 0; i < ASPxGridView1.VisibleRowCount; i++)
{
DataRowView row
= ASPxGridView1.GetRow(i) as DataRowView;
if (list.Where(e => e.examtype_StudentCard == row[0].ToString()).SingleOrDefault() != null)
{
ASPxGridView1.Selection.SelectRow(i);
}

}
}

其中,ASPxGridView1.GetRow(i)得到的是一个对象,至于是什么对象,视你绑定的数据源而定,因为我绑定的是一个datatable,这里得到的就是datarowview,如果不知道要把它转换成什么对象,可以试试row.GetType().toString(),得到它的数据类型,然后转换就可以了。当然了,你也可以把绑定的数据源全部转换成datatable,这样就可以不用担心类型转换的问题了。另记得线清空ASPxGridView已有的选中状态,ASPxGridView1.Selection.UnselectAll();,再调用这个方法,不然每次更新的时候它只是清空了当前页的绑定状态哦。

注:可能看不全的那个地方的代码是:if (list.Where(e => e.examtype_StudentCard == row[0].ToString()).SingleOrDefault() != null)

posted @ 2011-01-27 15:49 戏子痴心猪 阅读(533) 评论(0) 编辑
仅列出标题