可空类型
+展开
-C#
///可空类型
/// 在C#中 int32? 等价于 System.Nullable<int> 它们是一样的。
///System.Nullable<T>结构
///.NET 2.0Framework提供了System.Nullable<T>泛型结构,其定义如下所示
///public struct System.Nullable<T>
///{
/// public Nullable(T value);
///
/// public static expicit operator T ( T? value);
/// public static implicit operator T? ( T value);
///
/// public bool HasValue
/// {
/// get;
/// }
///
/// public T value
/// {
/// get;
/// }
///
/// public override bool Equals( object other );
/// public override int Gethashcode ();
/// public T GetvalueOrDefault();
/// public T GetvalueOrDefault ( T defaultValue );
/// public override string ToString ();
///}
///这个结构很好地解决了类型参数 T 取值类型时的空值问题,比如取int。下
///面有一个小例子展示了这个结构的用法。第一版本的Fct()利用了string类型
///的可空性,而第二个版本则利用了一个Nullable<int>结构实例的可空性。
///
using System;
/// <summary>
/// 主程序
/// </summary>
class program
{
/// <summary>
/// Fct方法接受一个字符串型数据,返回一个字符串型数据
/// </summary>
/// <param name="s">is string</param>
/// <returns></returns>
static string Fct(string s)
{
if (s == null)
{
return null;
}
return s + s;
}
/// <summary>
/// Fct方法接受一个可空整型,返回一个可空整型
/// </summary>
/// <param name="ni">is System.Nullable<int> </param>
/// <returns></returns>
static System.Nullable<int> Fct(System.Nullable<int> ni)
{
if (!ni.HasValue)
{
return ni;
}
return ni.Value + ni.Value;
}
/// <summary>
/// 入口Main方法
/// </summary>
static void Main()
{
///新建一个可空值类型的实例,注意:可空值类型和值类型
///一样,它们是存储在线程堆栈中的
System.Nullable<int> abc = new System.Nullable<int>();
///给可空值类型赋值为100
abc = 100;
///将可空值类型实例做为参数传给Fct方法,这个方法将传回
///一个可空值类型的实例给新建的可空值类型变量cc
int? cc=program.Fct(abc);
///输出可空值类型cc的值
Console.WriteLine(cc);
///这个方法很好用,一定要牢记,使用两个问号??的用法
///如果cc不为空(null)那么返回cc的值给abb变量,如果cc
///的值为空,那么返回数值111给abb变量
int? abb = cc ?? 111;
///输出abb的值
Console.WriteLine(abb);
///将可空值类型实例的值,赋值为空(null)
cc=null;
///这个方法很好用,一定要牢记,使用两个问号??的用法
///如果cc不为空(null)那么返回cc的值给abb2变量,如果cc
///的值为空,那么返回数值111给abb2变量
int? abb2 = cc ?? 222;
///输出abb2的值
Console.WriteLine(abb2);
}
}
/// 在C#中 int32? 等价于 System.Nullable<int> 它们是一样的。
///System.Nullable<T>结构
///.NET 2.0Framework提供了System.Nullable<T>泛型结构,其定义如下所示
///public struct System.Nullable<T>
///{
/// public Nullable(T value);
///
/// public static expicit operator T ( T? value);
/// public static implicit operator T? ( T value);
///
/// public bool HasValue
/// {
/// get;
/// }
///
/// public T value
/// {
/// get;
/// }
///
/// public override bool Equals( object other );
/// public override int Gethashcode ();
/// public T GetvalueOrDefault();
/// public T GetvalueOrDefault ( T defaultValue );
/// public override string ToString ();
///}
///这个结构很好地解决了类型参数 T 取值类型时的空值问题,比如取int。下
///面有一个小例子展示了这个结构的用法。第一版本的Fct()利用了string类型
///的可空性,而第二个版本则利用了一个Nullable<int>结构实例的可空性。
///
using System;
/// <summary>
/// 主程序
/// </summary>
class program
{
/// <summary>
/// Fct方法接受一个字符串型数据,返回一个字符串型数据
/// </summary>
/// <param name="s">is string</param>
/// <returns></returns>
static string Fct(string s)
{
if (s == null)
{
return null;
}
return s + s;
}
/// <summary>
/// Fct方法接受一个可空整型,返回一个可空整型
/// </summary>
/// <param name="ni">is System.Nullable<int> </param>
/// <returns></returns>
static System.Nullable<int> Fct(System.Nullable<int> ni)
{
if (!ni.HasValue)
{
return ni;
}
return ni.Value + ni.Value;
}
/// <summary>
/// 入口Main方法
/// </summary>
static void Main()
{
///新建一个可空值类型的实例,注意:可空值类型和值类型
///一样,它们是存储在线程堆栈中的
System.Nullable<int> abc = new System.Nullable<int>();
///给可空值类型赋值为100
abc = 100;
///将可空值类型实例做为参数传给Fct方法,这个方法将传回
///一个可空值类型的实例给新建的可空值类型变量cc
int? cc=program.Fct(abc);
///输出可空值类型cc的值
Console.WriteLine(cc);
///这个方法很好用,一定要牢记,使用两个问号??的用法
///如果cc不为空(null)那么返回cc的值给abb变量,如果cc
///的值为空,那么返回数值111给abb变量
int? abb = cc ?? 111;
///输出abb的值
Console.WriteLine(abb);
///将可空值类型实例的值,赋值为空(null)
cc=null;
///这个方法很好用,一定要牢记,使用两个问号??的用法
///如果cc不为空(null)那么返回cc的值给abb2变量,如果cc
///的值为空,那么返回数值111给abb2变量
int? abb2 = cc ?? 222;
///输出abb2的值
Console.WriteLine(abb2);
}
}
来源:http://2sws.blog.163.com/blog/static/179102492009843456708/
加支付宝好友偷能量挖...