posts - 930,  comments - 588,  views - 402万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
      在编码中,通常我们会用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就是

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

posted on   PetterLiu  阅读(2748)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示