热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

enum枚举型和字符串比较的问题

枚举在MSDN的定义是:enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除char以外的任何整型。枚举元素的

 

枚举在MSDN的定义是:

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增1。

关于枚举的个方面已经有一片很不错的文章说明了,可以通过以下链接访问:http://www.cnblogs.com/allenlooplee/archive/2004/12/19/70230.aspx

我这里的研究更加简单和浅显一些,主要是将它在实际应用中遇到的问题做一个说明。

我们知道 SqlServerType.Access.ToString() 将取得一个字符串 "Access",那么下面的方法A和方法B,你认为哪一个可以正确执行呢?

protected   enum  SqlServerType {
    Access,
    SqlServer
}

protected   void  A() {
    
switch  ( " Access " ) ...{
        
case  SqlServerType.Access.ToString():
            ... 
// Code
         case  SqlServerType.SqlServer.ToString():
            ... 
// Code
    }
}

protected   void  B() {
    
switch  (SqlServerType.Access.ToString()) {
        
case   " Access " :
            ... 
// Code
         case   " SqlServer " :
            ... 
// Code
    }
}

虽然他们看起来都是字符串在比较,但其实不是,方法A将无法编译,在 case 处提示应输入常量值。无论如何都无法让 switch 认为 SqlServerType.Access.ToString() 是一个字符串。事实上这个问题应该是 switch 的问题,我以为 case 是和 .ToString() 比较,但其实 case 先比较了 SqlServerType ,所以导致了程序出错,为什么会这样呢?我想和 switch 的运行机制有关,这个等稍后我再研究。

但是我希望通过 ConfigurationManager.ConnectionStrings["DatabaseType"] 来取得数据库类型,该怎么办呢?我们可以将字符串转换成一个 enum 值。

SqlServerType sType  =  Enum.Parse( typeof (SqlServerType), ConfigurationManager.ConnectionStrings[ " DatabaseType " ].ToString());
switch  (sType) {
    
case  SqlServerType.Access:
    
case  SqlServerType.SqlServer:
}

通过这样的转换,就 enum 型的数据就可以和 string 比较了。


推荐阅读
  • 在RAC环境中如何管理日志(redologfile)组Tuesday,2004-09-1411:52Eygle      htt ... [详细]
  • 在目标队列中对消息进行排队时出现异常。错误:15404,状态:19。CouldnotobtaininformationaboutWindowsNTgroupuserSERVER ... [详细]
  • 定制数据层关键字:数据层,访问,元数据,数据访问模型http://www.gaodaima.com/35448.html定制数据层_sqlserver ... [详细]
  • 这篇文章主要讲解了“SQLServer与Access数据库ASP代码有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • SqlServer分区表概述(转载)
    什么是分区表一般情况下,我们建立数据库表时,表数据都存放在一个文件里。但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件 ... [详细]
  • php5.3.x访问sqlserver2005
    由于项目需要,临时用php访问Sqlserver数据库,于是配置mssql扩展,但是无法访问,按照网上各种dll文件copy都不成功,最后终于发现是php版本问题,我的版本是php5.3 ... [详细]
  • 转载:http:www.crazycoder.cnDataBaseIndex.html查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设 ... [详细]
  • 本文主要介绍关于数据库,sql,sqlserver的知识点,对【数据库——概述】和【数据库到底要怎么做】有兴趣的朋友可以看下由【用编程写诗】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相 ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • 让SQL Server 2008默认使用Report Builder 2.0做报表设计器
    由于SQLServer2008比ReportBuilder2.0先发布,所以默认情况下,在SSRS2008中的报表管理器中单击“报表生成器”,打开的是ReportBuilder1.0版本 ... [详细]
  • 《How Tomcat Works》读书笔记(四)Tomcat Default Connector
    为什么80%的码农都做不了架构师?上节《HowTomcatWorks》读书笔记(三),只是讲了一个简单的connect ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • 接上文http:blog.itpub.net29254281viewspace-1318239领导让开发同学鼓捣一个可配置化的后台.又回到了原来的问题如果要灵活,很多参数要 ... [详细]
  • 也就是|单打_.net Core 自我学习随笔——工作的核心:增删改查
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了.netCore自我学习随笔——工作的核心:增删改查相关的知识,希望对你有一定的参考价值。上次介绍了一下如何进行连接 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
author-avatar
三毛2502858553
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有