C# 泛型(GENERIC) 技术教程文章

C# 类名获取,反射泛型对象获取值

string InsertString<T>(T t)   {     var type = typeof(T); //反射对象     var A = type.GetProperties(); //获取对象属性     var insertString = "insert into " + t.GetType().Name + " values ("; //t.GetType().Name 获取类名     foreach (var b in A) {       insertString += "@" + b.Name...

探讨c#中的泛型、委托、泛型委托、Action和Func及使用场景系列之二:委托【代码】

c#中委托定义了方法的类型,使得可以将方法当作参数来进行传递。使用委托的好处是:1 . 避免在程序中大量使用If-Else(Switch)语句;2 . 程序具有更好的可扩展性;先看这样一个场景:如何根据客户端的要求将数据用不同的格式表示。比如支付接口中支付成功后的提示信息,有的要用XML格式来返回给调用者,有的用JSON格式来返回,我们先看不使用委托的编码方式 : 1publicclass Class52 {3publicstring NotifyPay(string code, str...

C#学习系列之泛型类【代码】

由于长时间在代码中不使用泛型类,所以对泛型类的概念理解不是很深,最近在优化代码的时候遇到了问题,发现用泛型类非常好解决,所以自己又重新写了个列子加深理解。  泛型:主要解决的问题是当一个类中的逻辑被多个地方调用,但是传入的参数类型不同,此时使用泛型就能够解决复制方法的问题,让我们的代码逼格更高。 1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Thr...

C#中Dictionary泛型集合7种常见的用法

要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) Dictionary的描述1、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成2、任何键都必须是唯一的3、键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值4、Key和Value可以是任何类型(string,int,custom class 等) Dictionary常用用法:以 key 的类型为 int , value的类型为s...

理解C#泛型(转)

理解C#泛型http://www.cnblogs.com/wilber2013/p/4292240.html泛型中的类型约束和类型推断http://www.cnblogs.com/wilber2013/p/4291435.html原文:http://www.cnblogs.com/wangjunwei/p/4292326.html

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]【代码】【图】

原文:编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]前言  泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能。基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用。同时,它减少了泛型类及泛型方法中的转型,确保了类型安全。委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用。事件本身也是...

C# 关于泛型

C#总结之 泛型(1) 泛型的优点 泛型的使用主要是在集合中,在集合中非泛型是把类型转化为通用基类型Object,这样做虽然方便但是有两个缺点: <1>要进行装箱操作,拆箱操作,因此会降低性能 <2>缺乏对类型检查,容易出错。(2)类型参数的约束 通过限制类型,从而可以限制泛型实例化的类型。 <1>MyClass<T>where T:constraint. <2>约束的种类T:struct //类型必须是值类型 T:class //类型必须是引用类型 T:baseClassName //类型必...

C#知识 泛型

C#知识 泛型 泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,避免进行强制类型转换的需求提高类型安全性。...

C# 泛型简介【代码】

摘要:本文讨论泛型处理的问题空间、它们的实现方式、该编程模型的好处,以及独特的创新(例如,约束、一般方法和委托以及一般继承)。此外,本文还讨论 .NET Framework 如何利用泛型。下载 GenericsInCSharp.msi 示例文件 。注 本文假定读者熟悉 C# 1.1。有关 C# 语言的详细信息,请访问 http://msdn.microsoft.com/vcsharp/language。本页内容简介 泛型问题陈述 什么是泛型 应用泛型 一般约束 泛型和强制类型转换 继承和泛型 一般...

C# where泛型约束与new【图】

最近无意中看到了:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx。但是,人笨啊,木有看懂到底是啥意思,木办法自己写一个试试吧,权当做个笔记例子如下:接口:using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace WhereTest {/// <summary>/// 水果接口/// </summary>public interface IFruit{//水果名称string FruitName{get;set;}string GetName();/*接口中只能包含方...

C# 泛型【代码】【图】

一、什么是泛型泛型是C#2.0推出的新语法,而是2.0框架升级提供的功能。我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。二、为什么使用泛型先来看下面一个例子:using System; using System.Collections.Generic; using System.Linq; u...

C#泛型详解【代码】【图】

这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框架的时候。 一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。 我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来...

c# – 将非泛型类型转换为泛型类型【代码】

我有这门课:class Foo { public string Name { get; set; } }而这堂课class Foo<T> : Foo {public T Data { get; set; } }这就是我想要做的事情:public Foo<T> GetSome() {Foo foo = GetFoo();Foo<T> foot = (Foo<T>)foo;foot.Data = GetData<T>();return foot; }将Foo转换为Foo< T>?的最简单方法是什么?我无法直接转换InvalidCastException)并且我不想手动复制每个属性(在我的实际用例中,有多个属性),如果我不需要.是用户定义...

编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)

软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点。如何使用好集合是我们在开发过程中必须掌握的技巧。不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行。 建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们...

c#泛型继承,而类类型被继承【代码】

这样在C#中是可能的吗? 假设我有这个:public class T : U {... }我想要这个:public class A<T> : B<U> { ... }这样我就可以在我的代码中使用它:B<U> x = new A<T>();解决方法:您不能完全像编写它一样拥有它,但是您可以这样做:public class A<T, U> : B<U> where T : U {... }然后做B<U> x = new A<T, U>();

c# – StructureMap Generic Ctor命名实例【代码】

更新 我用以下代码解决了这个问题,但这不是我正在寻找的解决方案.对于更通用的解决方案,这仍然是一个开放的奖励.如果我们有一个不是int值的表或键值的字符串,我们必须手动添加它以使其工作.c.For(typeof(ILogDifferencesCommand<,>)).Use(typeof(LogDifferencesCommand<,>)).Ctor<ILogDifferencesLogger<int>>().Named(AppSettingsManager.Get("logDifferences:Target")).Ctor<string>().Named(AppSettingsManager.Get("logDiffere...

c# – 实体框架中的LINQ to SQL Generic Repository等效项【代码】

我正在为我的ORM从LINQ转换为SQL到Entity Framework,我正在更新我的存储库.所有这些都是完成的,除了通用的.我似乎无法弄清楚如何将我的Select方法从现在转换为适用于EF的方法.这是当前的代码:public T Select(int Id) {MetaDataMember PrimaryKey = this.DataContext.Mapping.GetTable(typeof(T)).RowType.DataMembers.SingleOrDefault(d =>(d.IsPrimaryKey));ParameterExpression Param = Expression.Parameter(typeof(T), "e");...

c# – 用泛型扩展方法替换继承【代码】

我创建了一个继承自KeyedByTypeCollection的类并对其进行了扩展. https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.keyedbytypecollection-1?view=netframework-4.7.2 KeyedByTypeCollection只有一个Find方法,如果没有找到任何项,则返回null.我更喜欢TryGetValue方法,所以我添加了一个.internal class TypeCollection<V> : KeyedByTypeCollection<V> {public T ValueOrDefault<T>() where T : V{if (!Cont...

C# 泛型【代码】【图】

泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。 示例下载 //1 引入泛型:延迟声明//2 如何声明和使用泛型//3 泛型的好处和原理//4 泛型类、泛型方法、泛型接口、泛型委托//5 泛型约束//6 协变 逆变//7 泛型缓存一 、泛型方法的使用二、泛型类,泛型接口,泛型委托(Action,Func) 三、 泛型约束T:结构类型参数必须是值类型。可...

如何在C#中调用具有动态属性的泛型方法【代码】

我有几种具有相似签名的方法,并试图将它们转换为一种通用方法而不使用接口.public List<MultiSelectDropdown> ConvertListOfJobStatusToDropdownListClickable(List<JobStatus> js) {var list = new List<MultiSelectDropdown>();if (js != null && js.Count >= 1) {list = js.Select(item => new MultiSelectDropdown { Name = item.StatusValue, Value = item.id.ToString() }).ToList();}return list;}public List<MultiSelectD...