学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)
目录
C# 可空类型
在日常生活中,相信大家都离不开手机,低头族啊!哈哈。。。 假如手机厂商生产了一款新手机,暂时还未定价,在C#1中我们该怎么做呢?
常见的解决方案:
- 围绕 decimal 创建一个引用类型包装器;
- 维护一个单独的 Boolean 标志,它表示价格是否已知;
- 使用一个“魔数”(magic value)(比如 decimal.MinValue )来表示未知价格。
public class Product
{
private string name;
private ProductPrice price; public Product(string name, ProductPrice price)
{
this.name = name;
this.price = price;
}
}
public class ProductPrice
{
public decimal Price;
public bool HasPrice;
}
而在C#2引入可空类型,使事情得到了极大的简化。
public class Product
{
public string Name { get; set; }
public decimal? Price { get; set; }
public Product(string name, decimal? price )
{
this.Name = name;
this.Price = price;
}
}
C# 可选参数和默认值
在我们日常的开发中,调用方法时对于特定参数总是会传递同样的值,而传统的解决方案是对方法的重载。 我们回到上一篇内容中讲到的Product类,假如我们的大多数产品不包含价格,而在C#4中引入了可选参数,来简化这类操作。
public class Product
{
public string Name { get; set; }
public decimal? Price { get; set; }
public Product(string name, decimal? price = null)
{
this.Name = name;
this.Price = price;
}
public static List<Product> GetSampleProducts()
{
List<Product> list = new List<Product>();
list.Add(new Product("硬装芙蓉王"));
list.Add(new Product("精白沙", 9m));
list.Add(new Product("软白沙", 5.5m));
return list;
}
public override string ToString()
{
return string.Format("{0}:{1}", Name, Price);
}
}
备注:
- 声明的可选参数可指定一个常量值,不一定为null。 如上述代码中可将产品的价格默认为decimal? price = 1.2m等。
- 可选参数可以应用于任何类型的参数,但对于除字符串外的任意引用类型,只能使用null作为常量值。
- 当方法有可选参数并设定了默认值,调用此方法时可选参数可不传递参数,此时默认传递的是设定的默认值。

相关资料
这篇就写到这里。下篇我们将继续学习《深入理解C#》的相关知识。谢谢!
学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)的更多相关文章
- C++入门经典-例9.5-为具体类型的参数提供默认值
1:默认模板参数是指类模板中由默认的数据类型作为参数的参数,在模板定义时,还可以为默认的数据类型声明,变量,并为变量赋值.代码如下: // 9.5.cpp : 定义控制台应用程序的入口点. #incl ...
- 在LoadRunner中从数组类型的参数随机取值的方法
在LoadRunner中从数组类型的参数随机取值的方法 使用web_reg_save_param做关联后,有时候会有多个匹配值. 为了模仿用户行为随机取一个值为后续transcation所用,可以使用 ...
- 【C#】妈妈再也不用担心自定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚
------------------更新:201411190903------------------ 经过思考和实践,发现套路中的第1条是不必要的,就是完全可以不用定义一个名为Default+属性名 ...
- 自定义控件如何给特殊类型的属性添加默认值 z
定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚 标题有点那啥,但确实能表达我掌握此法后的心情. 写自定义控件时往往会有一个需求,就是给属性指定一个默认值(就是可以在VS中右键该 ...
- MySql折腾小记二:text/blog类型不允许设置默认值,不允许存在两个CURRENT_TIMESTAMP
From: http://www.cnblogs.com/cyq1162/archive/2011/05/17/2049055.html 在 CYQ.Data 数据框架的反向工程中,遇到MySQL的问 ...
- select 的字段为空,给他显示默认值
select 的字段为空,给他显示默认值: 解决办法一: select id,name,(case when level is null then 0 else level end) as a fro ...
- Java 创建数组的方式, 以及各种类型数组元素的默认值
①创建数组的方式3种 ①第1种方法 public class MyTest { public static void main(String[] args){ //method 1 int[] arr ...
- swagger 接口文档,控制器 和 object类型的参数与返回值 的 注释不显示问题
一.控制器的注释不显示:是因为配置swagger的时候没有将includeControllerXmlComments参数配置为true,因为其默认值为false 二.object 类型的参数和返回值 ...
- 自定义控件如何给特殊类型的属性添加默认值 z(转)
自定义控件如何给特殊类型的属性添加默认值 z 定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚 标题有点那啥,但确实能表达我掌握此法后的心情. 写自定义控件时往往会有一个需求,就 ...
随机推荐
- 基于终端的日志工具logview
概述 logview是一个Shell脚本编写的基于终端的日志工具, 具有终端通知, email通知, 错误信息颜色配置, 以及灵活强大的监控配置. 还可以灵活的配置脚本监控的时间, 以及错误发生时需要 ...
- SyntaxError: Non-ASCII character '\xe5' in file index.py on line 6, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
python入门,hhh 在慕课网上学习python入门,编写汉诺塔的递归调用时,代码正确.但是加上注释后编译不通过 报如下错误: SyntaxError: Non-ASCII character , ...
- 不止是联网!教你玩转PC自带Wi-Fi网卡
前言:Wi-Fi对于现在的智能手机来说已经是再熟悉不过的配置了,而主板自带Wi-Fi网卡的设计也越来越普及,但有些玩家可能思维还停留在“Wi-Fi网卡 = 连无线网络用的网卡,我用有线就不需要”的层次 ...
- @Autowired和@Resource装配
从Spring2.5開始就能够使用注解自己主动装配Bean的属性. 使用注解自己主动装配与XML中使用autowire属性自己主动装配并没有太大区别. Spring容器默认禁用注解装配. 所以在基于注 ...
- C# AutoResetEvent
文章转载自:C# AutoResetEvent AutoResetEvent 常常被用来在两个线程之间进行信号发送 AutoResetEvent是.net线程简易同步方法中的一种,两个线程共享相同的A ...
- i2c 协议解析
1.基本概念 主机 初始化发送,产生时钟信号和终止发送的器件 从机 被主机寻址的器件 发送器 发送数据到总线的器件 接收器 从总 ...
- 重装windows导致grub损坏
本人一块磁盘第7分区装linux,第一分区先装xp,后重装为windows8.1后,发现grub引导没了,直接进了windows,解决办法如下: 1.LiveCD进入系统,打开shell 2.输入sh ...
- 找电影资源最强攻略,知道这些你就牛B了!
找电影资源最强攻略,知道这些你就牛B了! 电影工厂 2015-07-01 · 分享 点击题目下方环球电影,关注中国顶尖电影微杂志 我们也许没有机会去走遍千山万水,却可以通过电影进入各种各样的角色来 ...
- 通过web界面查看hadoop集群运行日志的地址
通过web界面查看hadoop集群运行日志的地址: http://hostname:8088/logs/ SecurityAuth-root.audit 0 bytes Aug 27, 2016 5 ...
- 【转】用python实现简单的文本情感分析
import jieba import numpy as np # 打开词典文件,返回列表 def open_dict(Dict='hahah',path = r'/Users/zhangzhengh ...