zoukankan      html  css  js  c++  java
  • CSharp中的Enum以及DataSetExtensions对DataRow的扩展

          在编码中,通常我们会用Enum来定义名称常量表示某些状态,这样让程序代码可读性提高。最近对.net对Enum类型进行了复习。
    几个要点:
    1.可以显式将枚举类型的变量转换整型。
    2.可以对一个枚举变量进行递增或递减操作。
    3.定义枚举时手工指定自己想要的整数值。
    4.可以选择除int之外的其他类型定义枚举类型的值,如byte,long.
    5.所有的Enum派生自Object,Object.ToString()已经自动为每个枚举进行了覆写,作用是返回枚举常数定义时的名称字符串。
    例如String转Enum, 可以用Enum.Parse方法。以及.net 3.5 System.Data.DataSetExtensions 对DataRow进行了扩展,支持泛型。
    避免装拆箱,提高性能。代码如下:
            [Test]
            
    /// <summary>
            
    /// Enum Knowledge review
            
    /// <remarks>
            
    /// petter liu http://wintersun.cnblogs.com
            
    /// </remarks>
            
    /// </summary>

            public void Alternative()
            
    {
                
    //Enum类型的值默认是int,默认从0开始,所以此处UnDeliver为0
                Console.WriteLine((int)Status.UnDeliver);
                
    //设定某个元素的值时,其后元素递增,此处Deliver为2
                Console.WriteLine((int)Status.Deliver);
                
    //Recevice 为3
                Console.WriteLine((int)Status.Recevice);
                Console.WriteLine(
    "------------------");

                
    //define a DataTable
                DataTable dt = new DataTable("testname");
                DataColumn column
    =new DataColumn("Status",System.Type.GetType("System.String"));
                dt.Columns.Add(column);
                DataRow row 
    = dt.NewRow();
                row[
    0= Status.UnDeliver;
                dt.Rows.Add(row);
                Status result;

                
    //从字符串转回枚举
                result = (Status)Enum.Parse(typeof(Status), row[0].ToString());
                Console.WriteLine(result);
                Console.WriteLine((
    int)result);
                Console.WriteLine(
    "------------------");

                
    //以对象数组的形式返回枚举中的所有值
                foreach(object o in Enum.GetValues(typeof(Status)))
                 Console.WriteLine(o.ToString());
                Console.WriteLine(
    "------------------");

                
    //返回一个枚举类型中所有值的名称字符串数组
                foreach (string s in Enum.GetNames(typeof(Status)))
                    Console.WriteLine(s);
                Console.WriteLine(
    "------------------");

                Status stauts 
    = Status.Fail;
                
    //G返回 名称
                string s1 = Enum.Format(typeof(Status), stauts, "G");
                
    //D返回 值
                string s2 = Enum.Format(typeof(Status), stauts, "D");
                Console.WriteLine(s1
    +"  "+s2);

            }


            [Test]
            
    public void DataRowNormal()
            
    {
                DataTable dt 
    = new DataTable("testname");
                DataColumn column 
    = new DataColumn("Status",typeof(Status));
                dt.Columns.Add(column);
                DataRow row 
    = dt.NewRow();
                row[
    0= Status.UnDeliver;
                dt.Rows.Add(row);

                Status result;
                result 
    = (Status)row[0];
                Console.WriteLine(result);
            }


            [Test]
            
    /// <summary>
            
    /// .net 3.5 System.Data.DataSetExtensions 对DataRow进行了扩展,支持泛型
            
    /// <remarks>
            
    /// petter liu http://wintersun.cnblogs.com
            
    /// </remarks>
            
    /// </summary>

            public void DataRowGeneric()
            
    {
                DataTable dt 
    = new DataTable("testname");
                DataColumn column 
    = new DataColumn("Status"typeof(Status));
                dt.Columns.Add(column);
                DataRow row 
    = dt.NewRow();
                
    //System.Data.DataSetExtensions.SetField<T>
                row.SetField<Status>(0,Status.UnDeliver);
           
                dt.Rows.Add(row);
                
    //System.Data.DataSetExtensions.Field<T>
                Status result= row.Field<Status>(0);

                Console.WriteLine(result.ToString(
    "d"));
                Console.WriteLine(result.ToString(
    "G"));
                Console.WriteLine(Enum.GetName(
    typeof(Status), result));
            }

    后记,还有就是位域,一个枚举的实例包含多个枚举值。在上面加上System.FLAGs的Attribute.NET Framework中的ThreadState就是

    这个实现的,二进制标志枚举。

  • 相关阅读:
    利用NewID()生成随机数
    ie下取得iframe里面内容
    [转]linux下动态库安装问题
    【转】基于OpenCV的人脸识别设计方案
    [转]Vim中的记录功能
    [转]opencv中facedetect例子浅析
    [转]vc中 error LNK2001:unresolved external symbol _WinMain@16的解决方法
    转VS2010解决方案转换到VS2008
    JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率?
    用DLL生成LIB文件
  • 原文地址:https://www.cnblogs.com/wintersun/p/1264352.html
Copyright © 2011-2022 走看看