日期:2013-04-14  浏览次数:20405 次

Wednesday, October 13, 2004

浮点数的比较运算
对浮点数进行比较,必须先舍入为相同精度再进行,因其的不精确性。
在需要测试某个float值或double值是否为无穷大或NaN时,不能直接用Single或Double结构中的PositiveInfinity、NegativeInfinity或NaN字段进行比较;应选用IsInfinity等方法来完成,因其有二义。
建议最好不要用“==”操作符去比较两个布尔值,因为不小心少打一个等号,会致命的。可以使用异或操作符“^”将更稳妥。异或操作等价于“!=”操作符,所以有不少人把“^”称为逻辑“不等于”操作符。只要用“^”操作符对“!=”操作的结果再进行一次逻辑非处理,就能得到与“==”操作符同样的效果,如:
bWeAreCompatible = bYouLikeMahler == bILikeMahler
bWeAreCompatible = !(bYouLikeMahler ^ bILikeMahler)
局部变量只在对它做出了声明的那个{语句块}里才是可见的。这个语句块有多大,求证中....
C#没有“else语句”之类的东东,C#中的if语句由一个if部分和一个可选的else部分构成。C#也没有“else if语句”,是两条if组合在一起而矣。
条件操作符
条件与(&&)与条件或(||)
bExpression1 && bExpression2//如果bExpression1被求值为false,bExpression2将不会被求值
bExpression1 || bExpression2//如果bExpression1被求值为true,bExpression2将不会被求值
古怪“条件表达式”(?:),唯一三目操作符。
一、C#的异常处理所用到关键字

try 用于检查发生的异常,并帮助发送任何可能的异常。

catch 以控制权更大的方式处理错误,可以有多个catch子句。

finally 无论是否引发了异常,finally的代码块都将被执行。

throw 用于引发异常,可引发预定义异常和自定义异常。
二、C#异常处理的格式 以下是引用片段:
try
{
程序代码块;
}
catch(Exception e)
{
异常处理代码块;
}
finally
{
无论是否发生异常,均要执行的代码块;
}


有效的调试技巧
没有漏网的鱼 "This statement should never be executed."

for语句以保留字"for"开始,后面跟着一对圆括号,括号里有三个用分号隔开的表达式。注意,这是分号在C#中惟一不被当作一个语句分隔符来对待的地方!这三个表达式分别叫作for循环的“初始化表达式”、“循环条件表达式”和“步长表达式”。






Friday, October 15, 2004

算法“Sieve of Eratosthences”(Eratosthences之筛)是一种用来生成素数的算法。素数是只能被1和它本身整除的整数。2是第一个素数,也是素数中惟一的一个偶数。
CPU耗时比较:方法调用 > 乘除运算 > 加减运算
switch语句
在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。
switch (args[0]) {
case "老板":
Console.WriteLine("早上好!我们随时准备为您效劳!");
break;
case "雇员":
Console.WriteLine("早上好!你可以开始工作了!");
break;
default:
Console.WriteLine("早上好!祝你好运!");
break;
}



与Java中的switch不同,C#的switch语句要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。这就是所谓C#的“不允许留下swicth分支漏斗”的规定,不过你可以让一个switch分支有多个switch标号。如:
....
case "*"://多种乘法运算符
case "x"://
case "X"://
dResult = dNum1 * dNum2
break;
....



编写C#程序的“基本工具”:
声明语句;
赋值语句;
选择语句(if, switch);//它们使程序能够根据一个比较操作或者其他布尔操作的结果有选择地改变执行路线
循环语句(while, do, for, foreach);//它们使程序能够反复多次地执行同一组语句。
跳转语句(return, break, continue, throw, goto);//它们使程序能够从一个地方跳转到另一个地方去继续执行。
C#没有>>>移位操作符
C#支持uint和ulong之类的无符号变量类型。因此,在C#中,右移操作符(即“>>”)对于无符号变量类型和带符号变量类型(比如int和long)的处理方式不同。右移uint和ulong丢弃低位并把空出的高位设置为零;但对于int和long类型的变量,“>>”操作符丢弃低位,同时,只有当变量值是正数时,“>>”才把空出的高位设置成零;如果“>>”操作的是一个负数,空出的高位被设置成为1。

Java中不存在无符号的变量类型。因此,我们用“>>>”操作符在右移时引入负号位;否则,使用“>>”操作符。
枚举器
枚举器即enum类型(Enumerator,或称为计数器),它是一个相关常量的集合。精确地说,enum类型声明为一组相关的符号常量定义了一个类型名字。例如,你可以创建一个名为Fruit(水果)的枚举器,把它作为一个变量值的类型使用,从而把变量可能的取值范围限制为枚举器中出现的值。
public class Demo {
public enum Fruit {
Apple, Banana, Cherry, Durian
}
public void Process(Fruit fruit) {
switch (fruit) {
case Fruit.Apple:
...
break;
case Fruit.Banana:
...
break;
case Fruit.Cherry:
...
break;
case Fruit.Durian:
...
break;
}
}
}







Sunday, October 17, 2004

C#方法调用传递的参数分四类:
默认的值参数(value parameter); //传递复制品
引用参数(reference parameter),关键字"ref";//传递引用指针
输出参数(output parameter),关键字"out"。//方法返回一个以上的返回值时使用
数组参数(array parameter),关键字"params"
引用参数与输出参数的区别:
“引用参数”与“输出参数”非常相似。out修饰符ref修饰符有很相似的地方:传址。事实上保留字“ref”和“out”本身在中间语言里的实现是一模一样的。但C#中的ref参数与ou