zoukankan      html  css  js  c++  java
  • 【C#2.0】点滴(不断补充中......)

    1.Nullable类型可以这么用!

                int? cursor;

                
    //其它逻辑

                cursor 
    = (++cursor) ?? default(int);


       上述代码的含义是,如果cursor为空值,则取int型的默认值0,否则,将cursor值增加1。特别注意++cursor,当cursor为空值的时候,++cursor仍然返回空值(cursor+1同样返回空值)。
        关于Nullable类型,有点觉得不是太好,那就是赋值的时候可以直接赋值,取值的时候却要通过Value属性获取,比如   

                 int? cursor;
                cursor 
    = 5;  //直接赋值
                int x = cursor.Value; //通过value属性取值


        如果能直接透明地取值就好了,比如像这样

                int? cursor;
                cursor 
    = 5;  
                
    int x = cursor; 


    2.关于泛型约束的思考
        曾经思考过这样一个问题,在下面示例的情况中,泛型是否有价值。比如,我想创建一个容器内,装入容器内的元素必须实现了接口IComparable。

        public class Container<T> where T : IComparable
        {
            
    private T[] innerArray;
        }

        
    public class Container2
        {
            
    private IComparable[] innerArray;
        }

        
        上面Container类使用了泛型和约束,Container2只是一个简单的类。表面看起来,Container2能够做与Container一样的事情,那么泛型实现的Container有什么优势了?在于两点:
    (1)Container2 对象可以容纳任意类型(只要实现了IComparable接口)的对象,而某个特定的Container对象只能容纳特定类型(当然实现了IComparable接口)的对象。也就是说,Container2 中的元素的类型是多样的,而某个特定的Container对象中的元素的类型却是统一的。
    (2)多继承。如果元素类型要从IComparable和另外一个接口IExample继承,那么,如果不使用泛型实现,则一定会存在向下转换的操作,而泛型实现可以避免这一点:

        public class Container<T> where T : IComparable ,IExample
        {
            
    private T[] innerArray;        
        }



  • 相关阅读:
    USACO Milk2 区间合并
    Codeforces 490B Queue【模拟】
    HDU 3974 Assign the task 简单搜索
    HDU 5119 Happy Matt Friends(2014北京区域赛现场赛H题 裸背包DP)
    Cin、Cout 加快效率方法
    POJ 1159 回文LCS滚动数组优化
    POJ 2479 不相交最大子段和
    POJ 1458 最长公共子序列 LCS
    在阿里最深刻的,还是职场之道给我的震撼
    精细化
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/394046.html
Copyright © 2011-2022 走看看