zoukankan      html  css  js  c++  java
  • 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("
    ");
    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的赋值。

  • 相关阅读:
    Eclipse慢慢学会的快捷键
    换行和flush()
    接口Interface
    对象的转型
    抽象类和抽象函数
    BufferedReader
    FileInputStream和FileReader
    Unable to instantiate receiver XXXXXX
    声明对象和定义数组
    Eclipse中文乱码问题
  • 原文地址:https://www.cnblogs.com/kelite/p/3353464.html
Copyright © 2011-2022 走看看