【c#-声明具有限制类型的泛型字典】教程文章相关的互联网学习教程文章

如何在C#泛型中指定可从字符串构造的T? (通用类型约束)【代码】

我想为我的T指定必需的默认构造选项:public interface IParameter<T> /* where T : T(string) */ { T Value { get; set; }}因此,如果这样通过,我将能够从给定的字符串构造它:Value = "bla";或至少像这样:Value = new T("bla");那么,如何在C#泛型中指定可从字符串构造的T?解决方法:不幸的是,C#没有为通用参数提供任意的构造函数签名限制.只有a restricted number of constraints are supported,最接近的是new constraint.但是...

c#-声明具有限制类型的泛型字典【代码】

我需要声明一个具有Type作为键和一个实例作为值的Dictionary. 我需要将键类型限制为某个类层次结构. 对于Java Map,我可以执行以下操作:Map<Class<? extends MySuperClass>, ? extends MySuperClass>如何在C#中实现呢?解决方法:不要直接公开Dictionary,这样您可以手动控制何时添加public void AddToDictionary(Type key, object value) {if(!key.IsAssignableFrom(typeof(SomeBaseClass))throw new ArgumentException("Must be an...

c#-基于可为空的类型创建泛型类的实例【代码】

我想创建将某些类型的值作为参数的泛型函数. >此类型可以为空或不能为空.>如果value为null函数应该返回null.>如果它不是null,并且它不是可为null的类型,则函数应返回MyGenericClass< T>(parameter)(也可以通过属性设置参数,此处无需使用构造函数)>如果它不是null,并且它是可为null的类型,则函数应该返回类似MyGenericClass< NotNullType(T)>(parameter.Value)的示例:对于参数int? x,函数应返回MyGenericClass< int>(x.Value). 这...

c# – 在尝试将Mock用于泛型类型时Moq的奇怪问题【代码】

一点代码:public interface IMyInterface {int GetIt(); }public class MyImplementation : IMyInterface {public int GetIt(){return 10;} }[Test]public void Testit(){Method<MyImplementation>();}private void Method<T>()where T : class , IMyInterface{var mock = new Mock<T>();mock.Setup(m => m.GetIt()).Returns(() =>{return 40;});Assert.AreEqual(40, mock.Object.GetIt());}请注意,在新建Mock时我使用的是泛型T,但...

C#查找没有泛型的所有类实现接口【代码】

我有通用类型的接口public interface IWork<T> {void Work(MySession session, T json); }当尝试此代码时,我试图找到实现具有所有通用类型的接口的所有类.var type = typeof(IWork<>); var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(p => type.IsAssignableFrom(p));它返回自己的接口.解决方法:问题是没有类/接口将直接扩展通用接口,它们都将扩展给定类型参数(例如字符串或其他类型参...

如何在C#中将子对象添加到父泛型类型【代码】

在Java中,我可以使用Generic Type中的extend关键字来做到这一点,但是在C#中,我无法弄清楚. 我有3个班级,其中一个是基班.public class BaseEntity { public string Id {get;set;} }public class EntityA : BaseEntity {}public class EntityB: BaseEntity {}然后我有一个用于数据集的模拟类.对于泛型类型,最小约束是BaseEntitypublic class MockDataStore<T> : IDataStore<T> where T : BaseEntity {List<T> items = new List<T>()...

c#-从泛型类型确定类型派生【代码】

我有以下实用程序例程,用于确定类型是否从特定类型派生:private static bool DerivesFrom(Type rType, Type rDerivedType) {while ((rType != null) && ((rType != rDerivedType)))rType = rType.BaseType;return (rType == rDerivedType); }(实际上,我不知道是否有更方便的方法来测试派生…) 问题是我想确定一个类型是否派生自一个泛型类型,但是没有指定泛型参数. 例如,我可以写:DerivesFrom(typeof(ClassA), typeof(MyGenericC...

C#泛型:如何通用使用它们?【代码】

[TestMethod] public void TestMyGenericBaseClasses() { Type typeCrazy = ThisPartyIsTypeCrazyWOOT();// How do I create a generic object?MadnessOhYeah<typeCrazy> sanity = new MadnessOhYeah<typeCrazy>();// How do I use a generic object after it has been created?Assert.IsTrue(sanity.MyTrueFunction(), "this is sparta");// How do I call a generic function generically?bool result = MyFunction<typeCrazy>()...

C# <T>泛型的使用

在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。这些限制称为约束。约束是使用 where 上下文关键字指定的。下面列出了六种类型的约束:约束说明T:结构 类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。有关更多信息,请参见使用可空类型(C# 编程指南)。T:类 类型参数必须是引用类型,包括...

C#泛型集合之——链表

链表基础 1.概述:C#中泛型集合中的链表—LinkedList 是一个双向链表,其结点为LinkedListNode 结构 其中,结点结构包含:Next,Previous,Value三部分。且结点中值可以重复。 链表的插删要快于Link Link实质上是顺序型,可以用foreach。而链表不行! 2.链表的创建及初始化: (1) LinkedList<类型> 链表名 = new LinkedList<类型> (); (2) LinkedList<类型> 链表名 = new LinkedList<类型> (数组名); 注意:LinkedList<类型> 链表名...

c# 泛型和索引

原文链接:https://my.oschina.net/u/2296689/blog/545777class YList<T>{private T[] _list;public YList(T[] ts){_list = ts;}public YList() { _list = new T[5];}public T this[int i] {get{return _list[i];}set {_list[i] = value;}}}转载于:https://my.oschina.net/u/2296689/blog/545777

C#泛型

一、泛型T 这个T在实际使用中很常见,比如List<T>。其实我们还可以写成List<object>。但是这样写会有一个问题。比如我把一个int数据存入到一个List<object>集合中,int则会被自动转成object,当我们试图取取用这个int数据的时候,我们还要把object转成int。这期间有一个转换,int=》object=》int,这个转换涉及到拆箱和封箱操作,也就是引用类型到值类型或者值类型到引用过程转换的过程,这个是很耗时的。当数据量大的时候,这个对...

C# 泛型 new{ }???【代码】

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace test_20190902_1 {class Program{static void Main(string[] args){HomeController home = new HomeController(); //创建对象 ; 先执行父类构造方法}}public class HomeController : BaseController{public HomeController(){Console.WriteLine("HomeController类的构造方法"); // 执行顺序 4 }...

C# 学习笔记:泛型(3):约束【图】

我们如果在泛型方法中创建泛型的实例,我们会发现它自动带了四个方法:这四个方法都是Object里面自动有的方法。由于我们在使用时由于泛型的高度可指定,我们可以为它表明是任何形式,类名、int、string都行,但是我们的自己写的代码逻辑为了执行它的功能,做不到能对任何类型都有很好的兼容,所以我们在指定泛型的类型的时候必须对泛型进行约束。 泛型约束 泛型的约束语法,在声明泛型的行有:where T : Type 这里的where是关键字,...

C# 之泛型详解

原文链接:http://www.cnblogs.com/yueyue184/p/5032156.html什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛...