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

c# – 嵌套泛型集合:如何实现从项到容器的引用?【代码】

在使用嵌套泛型集合实现设计时,我偶然发现了由C#的不变泛型引起的那些局限:Cannot convert from Collection<subtype of T> to Collection<T> 这意味着,以下内容不起作用,显然是由于泛型的不变性:class Outer<TInner, TInnerItem> where TInner : Inner<TInnerItem> {public void Add(TInner item){item.Outer = this; // ERROR:// Cannot implicitly convert from Outer<TInner, TInnerItem> // to Outer<Inner<TInnerItem>, TIn...

C#泛型继承数据访问【代码】

嗨,我想创建一个继承的基类,但我遇到了一些问题. 我有两个类几乎完成相同的工作,但从不同的数据库中获取它们使用的数据,并使用不同的内部数据结构来操作数据.我想在基础中使用虚拟doSomething方法,理想情况下也可以在基础中使用虚拟dataAccess方法. 第二个问题可以通过使用泛型来解决,但我不能使用泛型来解决第一个问题,因为我使用的DBMl上下文的构造函数不是无参数的. 我是不是错了.我想要干,但似乎正在反对继承. 示例代码如下.cl...

c# – 如何在泛型中使用值类型【代码】

我有以下代码:public class Class1 {void ValueSpecific(string arg){// do string stuff}void ValueSpecific(int arg){// do int stuff}void ValueSpecific(float arg){// do float stuff}void ValueGeneric(string arg){// do stuffValueSpecific(arg);// do more stuff}void ValueGeneric(int arg){// do stuffValueSpecific(arg);// do more stuff}void ValueGeneric(float arg){// do stuffValueSpecific(arg);// do more st...

c# – Resharper模式:在泛型方法中键入的字符串【代码】

简单地说,是否可以在Resharper中使用模式进行以下替换: 之前:AddType("MyApplication.Something.SomeObject", "ObjectName");后AddType<MyApplication.Something.SomeObject>("ObjectName");解决方法:抱歉,但这不起作用,主要是因为SSR没有文字的概念,如果$FOO $指定参数为AddType(“$FOO $”,“$BAR $”)将不会导致成功匹配和$BAR $被声明为参数占位符.

c# – 如何在不知道类型的情况下转换泛型类型【代码】

我试图在运行时创建一个通用对象.到目前为止,我已经能够创建它,但我无法弄清楚如何投射它.我所拥有的是枚举对象,我想生成EnumMapper,它将枚举值转换为自定义字符串以映射到旧数据库.Type enumType = myEnum.GetType(); Type enumMapperType = typeof(EnumMapper<>).GetGenericTypeDefinition().MakeGenericType(enumType); var mapper = Activator.CreateInstance(enumMapperType); // OK EnumMapper<> mapper = (EnumMapper<>) Ac...

C#泛型下界约束“其中MySubClass:T”(java的“超级”)【代码】

我想知道C#是否具有Java的< X super MySubClass>通用约束. 为了指定上限,可以使用类Foo< T>.其中T:MySuperClass {…},但是如何指定泛型参数的下限? 有一些方法可以获得类似的结果,但我还没有找到完美的东西: >使用第二个泛型参数 – 但调用者可以指定实际下限的子类.public class Foo<T, TLowerBound>where TLowerBound : MySubClasswhere TLowerBound : T {... }>这有时用于扩展方法,因此扩展方法的参数U被约束为类’参数T的超...

c# – 用于存储和使用具有特定限制的泛型类型的DataType?【代码】

我觉得这应该很容易,但我的大脑今天早上有问题. 我有自定义UserControl绑定到自定义ItemsSource.我想根据用户定义绘制项目的方式,将其设置为使用匹配的控件绘制每个项目. 例如,我希望能够从使用该控件的类中执行此操作var data = new List<object>(); data.Add(new MyClassA()); data.Add(new MyClassB()); data.Add(new MyClassB());myCustomControl.ItemsSource = myObjectArray;myCustomControl.ResourceLibrary = {{ MyClassA,...

c# – 在方法的中途添加泛型类型约束【代码】

我有两种通用方法 – public CustomObject<T> MethodA<T>(T arg1) where T : class {...return MethodB<T>(arg1); }public CustomObject<R> MethodB<R>(R arg2) where R : class, IInterface {...return new CustomObject<R>(); }问题显然是我不能用不实现IInterface的类型调用MethodB(T没有).但是,如果我这样做了 – public CustomObject<T> MethodA(T arg1) where T : class {...var casted = arg1 as IInterface;if (casted != ...

c# – 如何在隐式运算符中使用泛型?【代码】

我有一个非常简单的c类:struct Pt_t {T x, y;template <class T2> operator Pt_t<T2>() { Pt_t<T2> pt = {x, y}; return pt; } };这允许我创建一个具有我想要的任何类型的T的pt.我也可以做Pt_t< s8> = Pt_t< u64&gt ;;没问题.我如何在C#中做同样的事情?我尝试了下面的错误:class Pt<T>{public T x, y;//between operator and <T2>, error CS1031: Type expectedpublic static implicit operator<T2> Pt<T>(Pt<T2> v) {Pt<T> r =...

c# – 结构图和泛型类型【代码】

我的情况与我见过的其他情况有点不同.为了澄清,这不是正常的问题,例如;类似于IAClass映射到AClass等 – 这涉及到每个接口基本上使用单个具体类. 这涉及到一个通用类,但我希望能够加载它的所有可能用法. 例如 – 主要类是public class MyClass<TDomainObject> : IMyClass<TDomainObject> where TDomainObject : DomainObject所以示例用法是IMyClass<Person> p = new MyClass<Person>; IMyClass<Employer> p = new MyClass<Employer>...

涉及控制器和存储库的c#泛型问题【代码】

我有一个基本存储库类,其中包含所有常见的存储库方法(作为通用):public abstract class BaseRepository<T, IdType> : IBaseRepository<T, IdType>我的存储库来自这个基地,例如:public class UserRepository : BaseRepository<User, int>, IUserRepository我还有一个包含常见操作的基本控制器类,并在控制器中继承.存储库由DI注入其中.例如.public class UserController : BaseController<User> {private readonly IUserRepository...

C#具有泛型的类的性能【代码】

考虑一组从基本元素派生的元素.// "Abstract" general element class class AElement {public int Key; }// Specific element class implementation class BElement : AElement { }我想存储在列表中.这两个选项:List<AElement> aData = new List<AElement>(); List<BElement> bData = new List<BElement>();如果将BElement添加到aData和bData列表,并对两者执行操作,则bData版本明显快于aData版本.例如,如果使用转储通用BubbleSort...

C#动态方法调用泛型函数【代码】

我有以下两个功能:public class MyClass {public void Save<TObject>(TObject object) where TObject : class{ }public void Save<TObject>(TObject object, String strValue) where TObject : class{} }我希望能够动态调用第一个保存功能,类似于以下内容:public void DoSomething<T>(String strMethod) where T : class {T myObject = Activator.CreateInstance<T>();MyClass.GetType().GetMethod(strMethod, new Type[] { ty...

c# – SimpleInjector可以在运行时为泛型类型注册初始值设定项吗?【代码】

我可以在运行时使用SimpleInjector为Generic类型注册初始值设定项吗? (见下面的最后一行代码)public class BootStrapper {Type baseTypeGeneric = typeof(Sample<>);public void BootStrap(Container container){var types =from type in Assembly.GetExecutingAssembly().GetTypes()where type.Namespace == "NS.xyz" select type;foreach (Type type in types){Type baseType = baseTypeGeneric.MakeGenericType(type);if (type...

c# – 如何在使用泛型类型时指定匿名类型的类型【代码】

标题非常令人困惑.我将尝试用一个例子来解释.请考虑以下代码:String[] str={"Apple","Banana","Cherry","Orange"}; var anoCollection=from e in str select new{ch=e[0],length=e.Length} dataGridView.DataSource=anoCollection.ToList(); //TypeInitializationException我觉得我需要在ToList< T>()方法中提到上面的类型.但是我怎么能在这里提一个匿名类型呢?解决方法:永远不可能直接提到匿名类型,但您不应该这样做.通用类型推...