Tag: generics

如何确定两个对象的类型是否兼容?

我有一个通用的function,我想知道如何写。 List something; public int countItems(List Items) { // Here I would like to compare the type of “Items” with the type of “something” to see if they are compatible. How do I do it? return 0; }

通用基类包装嵌套generics类以减少类型参数规范:此模式是否有名称?

好的问题标题远非不言自明。 我看到自己经常这样做: 从这个答案 : public static class Equality { public static IEqualityComparer CreateComparer(Func keySelector) { return new KeyEqualityComparer(keySelector); } class KeyEqualityComparer : IEqualityComparer { readonly Func keySelector; public KeyEqualityComparer(Func keySelector) { this.keySelector = keySelector; } public bool Equals(T x, T y) { —- } public int GetHashCode(T obj) { …. } } } 我做了什么:我必须调用一个实现细节KeyEqualityComparer : […]

具有整数约束的C#generics方法拒绝从整数转换为generics类型

如果我有一个被约束为类型’int’的generics方法,那么我当然应该能够将一个整数转换为genericsT类型。 例如… public T ExampleMethod(int unchanged) where T : int { return (T)unchanged; } …编译器抱怨无法将类型’int’转换为’T’,但我有一个约束,表明目标是整数。 那肯定应该有用吗? 更新: 实际情况是我想要一个返回枚举值的辅助方法。 所以我理想的助手方法会更像这样…. public T GetAttributeAsEnum(XmlReader reader, string name) where T : enum { string s = reader.GetAttribute(name); int i = int.Parse(s); return (T)i; } ……并像这样使用它…… StateEnum x = GetAttributeAsEnum(xmlReader, “State”); CategoryEnum y = GetAttributeAsEnum(xmlReader, “Category”); OtherEnum z = […]

如何使用动态对象类型创建通用List

我想创建一个Type对象的通用列表。 我有 … Type type = typeof(Foo); object model = GetModel(); 现在我要创建一个new List((Foo)model) 这可能在C#中吗?

C#类型转换错误,尽管通用约束

为什么,对于类P的类型参数T的“必须从Ainheritance”的通用约束,第一次调用成功但第二次调用失败并且注释中详细说明了类型转换错误: abstract class A { } static class S { public static void DoFirst(A argument) { } public static void DoSecond(ICollection argument) { } } static class P where T : A, new() { static void Do() { S.DoFirst(new T()); // this call is OK S.DoSecond(new List()); // this call won’t compile with: /* cannot […]

generics的扩展方法

我正在看这个问题,我很好奇为什么这个不能编译。 鉴于此代码,任何人都可以解释为什么对IBase.Test()的调用没有解析为正确的扩展方法? public interface IBase { } public interface IChildA : IBase { } public interface IChildB : IBase { } public static class BaseExtensions { public static IBase Test(this IBase self) { return self; } public static T Test(this T self) where T : IChildB { return self; } } public static class TestClass […]

什么是学习仿制药的好资源?

任何人都可以帮助我从哪里开始,有关集合(非generics)和generics的基本知识是什么?

如何在导出List 的类中数据绑定到与列表项无关的属性

以前,我有一个包含内部System.Collections.Generic.List的类(其中Item是我创建的类)。 包装器类提供了几个集合级属性,这些属性提供了列表中项目的总计,平均值和其他计算。 我正在围绕这个包装的List和我的类周围的另一个BindingSource创建一个BindingSource ,并且能够通过第一个BindingSource获取包装列表中的Items以及使用第二个包装类的集合级属性。 一个简化的例子如下: public class OldClass() { private List _Items; public OldClass() { _Items = new List(); } public List Items { get { return _Items; } } // collection-level properties public float AverageValue { get { return Average() } } public float TotalValue { get { return Total() } } // … […]

为什么带约束的generics扩展方法不被识别为扩展方法?

可能重复: 没有使用generics扩展方法的类型推断 考虑两种方法: public static IEnumerable Merge (this IEnumerable<IEnumerable> coll) public static IEnumerable Merge (this IEnumerable coll) where T : IEnumerable 两者都编译得很好,在这两种情况下,generics类型的类型将在调用者的编译时知道,因此是扩展类型的确切类型。 你可以调用两个,但只有第一个作为扩展名。 为什么? 更新1 要查看它失败,请使用第二种方法,例如: var x = new List<List>(); var y = x.Merge(); 更新 – 关闭 难道你们不认为原帖是太精心设计得到清晰的画面吗? 出于教育目的,我认为这篇文章不应该被关闭,即使技术上(即答案)是重复的。 只需2美分。

Unity注册非generics接口的generics类型

我的情景看起来(对我来说)很直接,但我找不到解决方案。 我有这种情况 public class Class : IInterface where T : class { } 接口不能通用(来自WCF lib。) 所以我想注册这样的界面 container.RegisterType(typeof (IInterface ), typeof (Class)); 然后用T解决它 我该怎么做? 我错过了什么? 我的意图是做类似的事情 container.Resolve(/* specify T */);