用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
adaiye的公告
<center> 汇聚杭州外卖:<a href="http://www.waimaihui.com" >外卖汇</a> <script src="http://club.book.csdn.net/people/javascript/adaiye1.js"></script> <script type="text/javascript"><!-- google_ad_client = "pub-2823374497557651"; google_ad_width = 160; google_ad_height = 600; google_ad_format = "160x600_as"; google_ad_type = "text_image"; //2007-09-08: CSDN google_ad_channel = "4727907021"; google_color_border = "C3D9FF"; google_color_bg = "C3D9FF"; google_color_link = "CC0000"; google_color_text = "FFFFFF"; google_color_url = "008000"; google_ui_features = "rc:6"; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"> (function() { var selfurl=window.location.href,siteurl,regex=/(^\w+:\/\/)((\w|\.)+)(:\d+)?\//; var results=regex.exec( selfurl+"/" );if (results==null) siteurl = selfurl; else siteurl = results[1]+results[2]; document.write("<scr"+"ipt src=\""+"http://sitemap.cn.yahoo.com/inlink.js?url="+encodeURIComponent(siteurl)+"&site=1&sty=1\" charset=\"UTF-8\"></scr"+"ipt>"); })(); </script> <script type="text/javascript"> <!-- var _st_unit_id=5731; var _st_expr_tm=3600; //--> </script> <script type="text/javascript" src="http://js.tongji.yahoo.com.cn/0/11/99/ystat.js"></script> </center>
文章分类
CSDN读书
CSDN读书频道
计算机技术
about java jsp and others(RSS)
Java On BlogJava(RSS)
Java相关(RSS)
计算机资料免费下载
存档

原创  用默认值初始化泛型变量 收藏

问题:

你有一个泛型类包含一个由类自身定义类型参数的变量。由于对泛型对象的约束,你希望这个变量被初始化为其默认值。

解决方法:

非常简单的方法:只要使用default关键字初始化其值为默认值即可:

    public class DefaultValueExample<T>
    
{
        T data 
= default(T);

        
public bool IsDefaultData()
        
{
            T temp 
= default(T);

            
if (temp.Equals(data))
            
{
                
return (true);
            }

            
else
            
{
                
return (false);
            }

        }

        
        
public void SetData(T val)
        
{
            data 
= val;
        }

    }

使用这个类的代码可以参考这里:

using System;
using System.Collections.Generic;
using System.Text;

namespace SetDefaultValueExample
{
    
class Program
{
        
static void Main(string[] args)
    
{
            DefaultValueExample
<int> dv = new DefaultValueExample<int>();

            
// 检查是否被设置为默认值,如果是返回true
            bool isDefault = dv.IsDefaultData();
            Console.WriteLine(
"Initial data: " + isDefault);

            
// 设置数据
            dv.SetData(100);
            
// 再次检查,这个时候应该返回false
            isDefault = dv.IsDefaultData();
            Console.WriteLine(
"Set data: " + isDefault);
        }

    }


    
public class DefaultValueExample<T>
{
        T data 
= default(T);

        
public bool IsDefaultData()
    
{
            T temp 
= default(T);

            
if (temp.Equals(data))
        
{
                
return (true);
            }

            
else
        
{
                
return (false);
            }

        }


        
public void SetData(T val)
    
{
            data 
= val;
        }

    }

}

 当初始化一个相同类型参数的变量时,你不能只是设置这些变量为null。如果这个变量是值类型,比如说int或char,那会是什么呢?那将不能运行,因为值类型不能是null的。你也许会想到一个nullable类型,比如long?或者Nullable<long>,可以被设为空。然而,编译器无法知道用户将使用什么类型参数去构造这个类型。

default关键字允许你告诉编译器在编译时,这个类型的默认值将被使用。如果提供的类型参数是数值(int,long,decimal),那么默认值将会是0。如果是引用类型,那么默认值将会是null。如果是结构体,那么这个结构体的默认值将根据其每一个字段的类型设为0或null。

发表于 @ 2008年07月23日 15:29:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:外卖汇 汇聚杭州外卖 | 新一篇:另类的二级域名实现方法

  • 发表评论
  • 评论内容:
  •  
Copyright © adaiye
Powered by CSDN Blog