Effective C# 学习笔记(十九)确保0(null)对于值(引用)类型是一个合法(理)的默认值
2011-07-09 23:23
387 查看
默认情况下,.net系统会把所有对象的默认值设置为0。一般情况下,你也没有什么方法可以将默认值设置为非0。但有一种情况例外,就是Enum类型,其可指定其默认值范围。代码如下:
public enum Planet
{
//
Explicitly assign values.
//
Default starts at 0 otherwise.
Mercury
= 1,
Venus
= 2,
Earth
= 3,
Mars
= 4,
Jupiter
= 5,
Saturn
= 6,
Neptune
= 7,
Uranus
= 8
//
First edition included Pluto.
}
//这里的sphere就会为0,但他不是个合法的Planet
Planet sphere = new
Planet();
//合适的做法为将0作为None,即不是所有的枚举值中的一个值来定义。
[Flags]
public enum Styles
{
None
= 0,
Flat
= 1,
Sunken
= 2,
Raised
= 4
}
对于引用类型的对象来说,一般都会默认初始化为null,但有些情况下需要特殊处理以保证其符合实际中的应用,如对于string类型的对象,一般会返回string.Empty,这比返回null在大多数情况下好的多。
public struct
LogMessage2
{
private
int ErrLevel;
private
string msg;
public
string Message
{
get
{
return
(msg != null) ?msg : string.Empty;
}
set
{
msg
= value;
}
}
}
public enum Planet
{
//
Explicitly assign values.
//
Default starts at 0 otherwise.
Mercury
= 1,
Venus
= 2,
Earth
= 3,
Mars
= 4,
Jupiter
= 5,
Saturn
= 6,
Neptune
= 7,
Uranus
= 8
//
First edition included Pluto.
}
//这里的sphere就会为0,但他不是个合法的Planet
Planet sphere = new
Planet();
//合适的做法为将0作为None,即不是所有的枚举值中的一个值来定义。
[Flags]
public enum Styles
{
None
= 0,
Flat
= 1,
Sunken
= 2,
Raised
= 4
}
对于引用类型的对象来说,一般都会默认初始化为null,但有些情况下需要特殊处理以保证其符合实际中的应用,如对于string类型的对象,一般会返回string.Empty,这比返回null在大多数情况下好的多。
public struct
LogMessage2
{
private
int ErrLevel;
private
string msg;
public
string Message
{
get
{
return
(msg != null) ?msg : string.Empty;
}
set
{
msg
= value;
}
}
}
相关文章推荐
- Effective C#阅读笔记-5对于值类型保证0是一个有效状态
- Effective C# 学习笔记(十八)区分值类型和引用类型
- JAVA学习笔记41——引用类型比较2:新闻排序应用+商品排序应用
- <Head First Java>学习笔记--第三章:primitive主数据类型和引用
- 【java基础知识(学习笔记)】--引用数据类型
- Effective C# 原则8:确保0对于值类型数据是有效的
- 引用类型2 Array(转换方法和栈方法)——JS学习笔记2015-6-25(第66天)
- Effective C++学习笔记:必须返回一个对象时不要试图返回一个引用
- C#学习笔记10:Try-catch的用法和引用类型、值类型整理
- javascript学习笔记 - 引用类型 RegExp
- js学习笔记 chapter5 引用类型
- JAVA学习笔记3--类,对象,变量,方法,构造方法,this,引用类型
- C#学习笔记 2 初识引用类型
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术07--引用类型和值类型
- javascript学习笔记 - 引用类型 Function
- Effective C# 学习笔记(四十一)使利用DynamicObject或IDynamicMetaObjectProvider接口实现数据驱动的动态类型
- js学习笔记:引用类型——Array
- Effective C# 学习笔记(二十六)防止返回类内部的对象引用
- 黑马程序员_学习笔记10——引用类型与值类型,继承,访问修饰符,里氏转换
- [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties