C#注意事项

1、运算溢出处理

   C#默认忽略溢出异常,如果需要强制进行局部异常检查则需要是使用checked关键字。如果需要进行全局性的异常检查则需用启用/checked属性。

 1 /*****************************************/ 
 2            short numb1 = 30000, numb2 = 30000;
 3             // 显式的将int转换为short(允许数据丢失).
 4             short answer = (short)Add(numb1, numb2);
 5 /****************************************/
 6 
 7 //捕获溢出异常
 8  try
 9             {
10                 byte sum = checked((byte)Add(b1, b2));
11                 Console.WriteLine("sum = {0}", sum);
12             }
13             catch (OverflowException ex)
14             {
15                 Console.WriteLine(ex.Message);
16             }
View Code

 2、隐式变量(var),只能用于方法或属性范围内的本地变量。var变量必须在声明时为其赋初始值。

     隐式变量类型也是强类型变量,在编译时确定了其类型,之后该数据被认为是其声明时的数据类型。不同于JavaScript和PHP等语言中的变量类型(通常叫做动态类型)。C#中的动态类型需要使用dynamic来声明。

static void DeclareImplicitVars()
        {
            // Implicitly typed local variables.
            var myInt = 0;
            var myBool = true;
            var myString = "Time, marches on...";

            // Print out the underlying type.
            Console.WriteLine("myInt is a: {0}", myInt.GetType().Name);
            Console.WriteLine("myBool is a: {0}", myBool.GetType().Name);
            Console.WriteLine("myString is a: {0}", myString.GetType().Name);
        }
View Code

  注意:使用隐式的本地变量并不能带来任何好处,反而让阅读者不能一目了然。所以,如果需要int就声明为int而非var。那么要var干什么?

      隐式变量的作用:隐式变量在LINQ技术中不可或缺。应该只有在定义LINQ返回值类型时才使用var.

 1  #region LINQ example
 2         static void QueryOverInts()
 3         {
 4             int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };
 5             var subset = from i in numbers where i < 10 select i;
 6 
 7             Console.Write("Values in subset: ");
 8             foreach (var i in subset)
 9             {
10                 Console.Write("{0} ", i);
11             }
12             Console.WriteLine();
13 
14             // Hmm...what type is subset?
15             Console.WriteLine("subset is a: {0}", subset.GetType().Name);
16             Console.WriteLine("subset is defined in: {0}", subset.GetType().Namespace);
17         } 
18         #endregion
View Code

3、字符串赋值

   C#中使用string声明的字符串类型在赋值时,字符串内容的直接修改并非对原有字符串进行修改,而是开辟另外一个存储区域存储最新的赋值。若字符串多次变更则不应过多的直接使用字符串赋值。应替换使用System.Text.StringBuilder

 1  #region StringBuilder
 2         static void FunWithStringBuilder()
 3         {
 4             Console.WriteLine("=> Using the StringBuilder:");
 5 
 6             // Make a StringBuilder with an initial size of 256.
 7             StringBuilder sb = new StringBuilder("**** Fantastic Games ****", 256);
 8 
 9             sb.Append("\n");
10             sb.AppendLine("Half Life");
11             sb.AppendLine("Beyond Good and Evil");
12             sb.AppendLine("Deus Ex 2");
13             sb.AppendLine("System Shock");
14             Console.WriteLine(sb.ToString());
15 
16             sb.Replace("2", "Invisible War");
17             Console.WriteLine(sb.ToString());
18             Console.WriteLine("sb has {0} chars.", sb.Length);
19             Console.WriteLine();
20         }
21         #endregion
View Code

 4、C#的函数参数传递

   参数修饰符:无,out,ref,params。

   无修饰符则为按值传递

   out修饰符定义一个引用参数,函数的结果必须通过这个参数输出。可以使用多个out参数,让函数有多个返回。

   注意:方法中只能包含一个params参数,且必须位于函数的最后一个参数。

   可选参数:必须放在所有非可选参数之后。

5、null可用于创建一个空的对象引用。在数据库操作中会经常遇到null的情况。可空类型可以通过?来定义。??操作用于进行是否为null及若为null的赋值。

posted @ 2013-10-06 11:38  kelite  阅读(370)  评论(0编辑  收藏  举报