c#中判断对象为空的几种方式(字符串等)
(1)先了解几个与空类型相关的关键字和对象
Null :
关键字表示不引用任何对象的空引用,它是所有引用类型变量的默认值,在2.0版本之前也就只有引用变量类型可以为null,如(string a=null)但在c# 2.0版本之后,Net也引入了可以为Null的值类型,但变量在定义的时候方式有所不同,如:int ? a=null。详细看http://msdn.microsoft.com/zh-cn/library/1t3y8s4s.aspx。不在内存中开辟内存地址,可用于引用是否可用。
DBNULL:
是一个唯一类,也就是说这种类型的实例只有一个,即DBNull.Value。主要用来指示数据库中的字段值为空(null)时在.Net中映射的值,另外还可以用于在 COM Interop 中区分 VT_NULL 变量(与空对象关联)和 VT_EMPTY 变量(与 DBNull.Value 实例关联)。详细看http://msdn.microsoft.com/zh-cn/library/system.dbnull%28v=vs.80%29.aspx。它应该有固定不变的内存。
String.Empty和"":
这两个都表示空字符串,空字符串是一个特殊的字符串,所以它依然是一个字符串实例,也就是说它在内存中依然分配了明确的地址。
Convert.IsDBNull():返回有关指定对象是否为 DBNull 类型的指示。即是用来判断对象是否为DBNULL的。其返回值是True或Flase。主要用于和数据库操作相关的值判断。
(2)各种的使用方法和效率
对象的判断:使用Null可用于任何引用变量是否为空的判断,是最基本的对象为空判断方式,在和数据库相关的操作中使用DBNull.vaule或者Convert.IsDBNUll。
字符串判断:string在C#中也是一个引用类型,但其又具有一定的特殊性。我们在使用string时,往往会把“变量值为空的字符串对象”和“变量值为空字符的字符串对象”搞混。所以经常会因为对此理解不深引起好多问题,因为string是我们开发过程使用最频繁的类型之一,对于字符串的判断方法,通过对网上资料的整理和自己的实际操作经验现总结如下:
string str
1:string.IsNullOrEmpty == str 这种方式不但一次性能判断"空的字符串变量",还能判断“值为空字符串的变量”,并且还可以让代码简洁美观。判断的效率也不算低。
2:str.Length == 0 这种方式,不推荐使用。这种判断方式的执行效率最高,但要使用它你必须保证字符串不null,如果为null就会报出异常,
3.str == string.Empty 或 str == "" 这两种方式,不推荐使用,他只能判断“值为空字符串”的字符串变量,而且效率比较低
4.str == null 这种方式也不怎么推荐,原因和3一样。
c#中判断对象为空的几种方式(字符串等)的更多相关文章
- Javascript 中判断对象为空
发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是 ...
- PHP中判断变量为空的几种方法
判断变量为空,在许多场合都会用到,同时自己和许多新手一样也经常会犯一些错误, 所以自己整理了一下PHP中一些常用的.判断变量为空的方法. 1. isset功能:判断变量是否被初始化本函数用来测试变量是 ...
- PHP中判断变量为空的几种方法小结
isset 主要用来判断变量是否被初始化过empty 可以将值为 "假"."空"."0"."NULL"." ...
- python中判断实例可迭代地几种方式
1. 利用 __iter__内建属性 if hasattr(obj, '__iter__') : print 'iterable' 这种方法不能检测字符串,如:hasattr('', '__iter_ ...
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...
- js中判断对象是否存在
s中判断对象是否存在,写法有很多种: 第一种:if (!myObj) { var myObj = { }; }第二种:var global = this; if (!global.myObj) { ...
- JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性
前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...
- Struts2中获取HttpServletRequest,HttpSession等的几种方式
转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...
- C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
随机推荐
- 新建的表如果还没有数据,用exp导的时候会忽略
源地址:http://www.07net01.com/2015/07/884873.html
- matplotlib python高级绘图库 一周总结
matplotlib python高级绘图库 一周总结 官网 http://matplotlib.org/ 是一个python科学作图库,可以快速的生成很多非常专业的图表. 只要你掌握要领,画图将变得 ...
- [POJ 2923] Relocation (动态规划 状态压缩)
题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...
- ReverseBits
eclipse没问题,leetcode 1不能通过,超出int最大值了,但是怎么转无符号? /*Write a function that takes an unsigned integer and ...
- Redis集群创建报错
Redis集群环境:och163/och164/och165 在执行如下脚本时报错: ./src/redis-trib.rb create 10.1.253.163: 10.1.253.164: 10 ...
- 洗清UI自动化鸡肋说的不白之冤
人类文明发展的一个重要标识是工具的诞生,当人类开始制作工具来提高生产力时,就逐渐拉开了与其他生物的距离.曾在2013年,<Google如何测试软件>中提到的分层自动化金字塔,轰动业界.而在 ...
- Orchard官方文档翻译(四) 让Orchard在WebMatrix下工作
原文地址:http://docs.orchardproject.net/Documentation/Working-with-Orchard-in-WebMatrix 想要查看文档目录请用力点击这里 ...
- 解决spawn-fcgi child exited with: 1
spawn-fcgi -d /data/web/ad/ -f /data/web/ad/code.py -a -P /data/openresty_81/nginx/pid/ad.pid 出错的时候请 ...
- 前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节
1:一个小的测试实例 CREATE TABLE SALES.TEST_ ( TEST_BYTE BYTE), TEST_CHAR CHAR) )--TABLE CREATED ')--1 ROW IN ...
- Android各个文件夹对应的分辨率?