C#泛型与linq

泛型

我们仔细观察类中的代码看那些类型需要修改,每次需要新类型(long,double,string),我们都需要重复这个过程。在这些过程之后,我们有了很多几乎相同代码的类,占据了额外的空间。调试和维护这些代码不但复杂而且容易出错。

定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化。可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念。C#中提供了五种泛型,类,结构,接口,委托和方法。

class MyStack<T>
    {
        T[] statkArray;
        int stackPointer = 0;
        const int MaxStack = 10;
        bool IsStackFull { get { return stackPointer < MaxStack; } }
        bool IsStackEmpty { get { return stackPointer <= 0; } }

        public void Push(T x)
        {
            if (!IsStackFull)
            {
                statkArray[stackPointer++] = x;
            }

        }

        public T Pop()
        {
            return(!IsStackEmpty)?statkArray[--stackPointer]:statkArray[0];
        }

        //int[] arr={1,2,3,4};

        public void Print()
        {
            for (int i = stackPointer-1; i>=0 ; i--)
            {
                Console.WriteLine("value;{0}",statkArray[i]);
            }
        }
}
static void Main(string[] args)
        {
            MyStack<int> stackint = new MyStack<int>();
            MyStack<string> stackstring = new MyStack<string>();

            stackint.Push(3);
            stackint.Push(5);
            stackint.Push(7);
            stackint.Push(9);

            stackint.Print();
            stackstring.Push("Hava a good day");
            stackstring.Push("Hi there!");
            stackstring.Print();

            Console.ReadKey();

        }

泛型委托:

class simple
    {

        static public void PrintString(string s)
        {
            Console.WriteLine(s);
        }

        static public void PrintUpperString(string s)
        {
            Console.WriteLine("{0}",s.ToUpper());
        }
    }

delegate  void MyDelegate<T>(T value);
    class Program
    {
        static void Main(string[] args)
        {
            var mydel = new MyDelegate<string>(simple.PrintString);
            mydel += simple.PrintUpperString;

            mydel("rocky");
            Console.ReadKey();
        }
    }

泛型接口:

interface IMyfc<T>
    {
        T returnIt(T inValue);
    }

class Simple<S>:IMyfc<S>
    {

        public S returnIt(S inValue)
        {
            return inValue;
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            var trivInt = new Simple<int>();
            var trivString = new Simple<string>();
            Console.WriteLine(trivInt.returnIt(5));
            Console.WriteLine(trivString.returnIt("张三"));

            Console.ReadKey();
        }
    }

linq:

class Program
    {

        static void Main(string[] args)
        {

            int[] array = { 11, 12, 13, 14 };
            Func<int, int> func = new Func<int, int>(Method);

            var arr = array.Select(func);
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();

        }

        static int Method(int x)
        {
            if (x == 12)
            {
                return x;
            }
            else
            {
                return 0;
            }
        }
    }
时间: 2024-08-01 23:00:54

C#泛型与linq的相关文章

C# 两个List泛型用 Linq去重复数据 或者 得到重复数据

1, 两个List泛型用Linq去重复数据 Code: List<string> lstA = new List<string> { "E00401501B652563", "E00401501B652564", "E00401501B652565", "E00401501B652566", "E00401501B652567", "E00401501B652568&quo

C# linq查询 动态OrderBy

groupList是原始数据集合,List<T> sortOrder是排序类型,desc 或者asc sortName是排序属性名称 1.使用反射. private static object GetPropertyValue(object obj, string property) { System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property); return propertyInfo.G

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.NET中快带序列化和反序列化.最后介绍在使用.NET序列化JSON过程中的注意事项. 读前必备: A.泛型       [.net 面向对象编程基础]  (18) 泛型 B.LINQ使用  [.net 面向对象编程基础] (20) LINQ使用 1. 关于JSON JSON的全称是”JavaScrip

我的Windows Phone 8

学习Windows Phone 8开发,将自己收集到的学习资料做一个汇总(不断更新). 我的Windows Phone应用 DotaMax MyAppToStart 麦子学院 WP8.1版(UI简陋) WP7学习博客 整理Windows Phone 7 教程1.0 超过500篇文章   作者:机微网 WP7 开发31日谈 WP8学习视频 传智播客 .NET视频 主要初学: C#编程基础 C#面向对象基础 WPF教程 WP7移动开发 WP8.1移动开发 麦子学院(免费观看,需要注册账号)  作者:

Visual Basic的未来之路

上周,微软宣布了他们改变Visual Basic语言未来发展计划的想法.这次公布给Visual Basic开发人员留下了很多不确定性,但Visual Basic语言的设计者Anthony D.Green说明了这个新策略的一些细节. Green首先列出了当时使用VB进行开发的四个基础指导原则:         1.VB和C#共享的通用IDE和平台构建块. 2.共享的"多范式.面向对象.命令式.强类型等"语言特性. 3.在API的边界需要强大的跨语言互操作性和丰富的语言创新机会(如泛型.L

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

c#基础浅学

C# 程序设计 第一章 初识 .NET Framework 和 C# .NET Framework 是支持生成和运行下一代应用程序和 Web 服务的内部Windows组件 .NET Framework 的关键组件为公共语言运行时(CLR)和 .NET Framework 类库(.dll) .NET Framework 提供了托管执行环境,简化的开发和部署以及与各种编程语言的集成(跨语言的平台) .NET Framework 具有两个主要组件:公共汉语言运行时(CLR) .NET Framewor

Excel催化剂开源第46波-按行列排列多个图形技术要点

此篇对应功能出自:第10波-快速排列工作表图形对象 - 简书 https://www.jianshu.com/p/eab71f2969a6 在Excel的对象模型中,列的宽度不是一般所期待的和行高一样是磅为单位,而是由当前所设定的字符大小的字符宽度为单位,致使在根据图片大小来调整列宽时,没有办法调整到位,总是有那么一点点误差. 此篇介绍的图形排列过程中,也会受此困扰,间接使用循环的方式将列宽调整好,或者用当前的ColumnWidth和Width两个值来算他们之间的比例的方式,但仍然有误差,所以E

泛型 Field 和 SetField 方法 (LINQ to DataSet)

LINQ to DataSet 为 DataRow 类提供用于访问列值的扩展方法:Field 方法和 SetField 方法.这些方法使开发人员能够更轻松地访问列值,特别是 null 值.DataSet 使用 Value 来表示 null 值,而 LINQ 使用 .NET Framework 2.0 中引入的可以为 null 的类型支持.使用 DataRow 中预先存在的列访问器需要将返回对象强制转换成相应的类型.如果 DataRow 中的特定字段可以为 null,则必须显示检查 Null 值,