Tag: generics

如何将List <Object>转换为List <MyClass>

这不编译,任何build议表示赞赏。 … List<Object> list = getList(); return (List<Customer>) list; 编译器说:不能强制List<Object>为List<Customer>

C#genericstypes约束的一切可为空

所以我有这个class: public class Foo<T> where T : ??? { private T item; public bool IsNull() { return item == null; } } 现在我正在寻找一个types约束,允许我使用所有的types参数,可以为null 。 这意味着所有的引用types,以及所有的Nullable ( T? )types: Foo<String> … = … Foo<int?> … = … 应该是可以的。 使用class作为types约束只允许我使用引用types。 附加信息:我正在编写一个pipe道和filter应用程序,并希望使用null引用作为传递到pipe道中的最后一个项目,以便每个filter都可以很好地closures,执行清理等操作。

什么是Hashtable的通用版本?

我一直在.NET中学习generics的基础知识。 但是,我没有看到Hashtable的通用等价物。 请分享一些示例C#代码来创buildgenerics哈希表类。

C#generics将不允许委托types约束

是否有可能在C#中定义一个类, class GenericCollection<T> : SomeBaseCollection<T> where T : Delegate 在.NET 3.5中我无法完成这一切。 我试过使用 delegate, Delegate, Action<T> and Func<T, T> 在我看来,这在某种程度上应该是可以允许的。 我试图实现我自己的EventQueue。 我最终只是做了这个[原始逼近你]。 internal delegate void DWork(); class EventQueue { private Queue<DWork> eventq; } 但是后来我失去了对不同types的函数重复使用相同定义的能力。 思考?

解释Collections的语法。<String> emptyList()

我只研究了generics编程, List<E>接口和ArrayList ,所以我可以理解下面的语句。 ArrayList<String> list = new ArrayList<String>(); 但我不明白我在上网时看到的下一个声明。 List<String> list2 = Collections.<String>emptyList(); 什么是Collections ? 为什么不是Collections<E>或Collections<String> ? 为什么<String>放在方法名称emptyList之前? (不是emptyList<String>()正确的通用?) 这个声明是什么意思?

在C#中,如何实例化一个方法内传递的genericstypes?

我如何实例化typesT在我的InstantiateType<T>方法下面? 我得到的错误: “T”是一个“types参数”,但像一个“variables”使用。 : (SCROLL DOWN FOR REFACTORED ANSWER) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestGeneric33 { class Program { static void Main(string[] args) { Container container = new Container(); Console.WriteLine(container.InstantiateType<Customer>("Jim", "Smith")); Console.WriteLine(container.InstantiateType<Employee>("Joe", "Thompson")); Console.ReadLine(); } } public class Container { public T InstantiateType<T>(string firstName, string lastName) where T : IPerson { […]

如何解决运算符'!='不能应用于'T'和'T'types的操作数

这个代码片段按照预期的inttypes工作: public class Test { public int Value { get { return _Value; } set { if (_Value != value) { _Value = value; } } } private int _Value; } 当int被genericsTreplace时,编译器会抱怨: 运算符'!='不能应用于'T'和'T'types的操作数 为什么会发生这种情况,是否有办法解决这个问题?

JavagenericsT vs Object

我想知道以下两个方法声明有什么区别: public Object doSomething(Object obj) {….} public <T> T doSomething(T t) {….} 有一个你可以/会做一个,而不是另一个? 我在这个网站的其他地方找不到这个问题。

当“type”T必须是一个引用types“如何使一个方法通用?

可能重复: 为什么在我的C#generics方法中出现“错误:…必须是引用types”? 我有两个几乎相同的Repository方法: public IList<Fund> GetFundsByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Fund>() .AddNameSearchCriteria<Fund>(searchExpression) .AddOrder<Fund>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Fund>(); } public IList<Company> GetCompaniesByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Company>() .AddNameSearchCriteria<Company>(searchExpression) .AddOrder<Company>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Company>(); } 唯一的区别是第一个_session.CreateCriteria属于Fundtypes,第二个是company 我希望我可以通过改变方法定义为通用: public IList<T> GetEntitiesByName<T>(int pageSize, string searchExpression) where T : ISearchableEntity { return _session.CreateCriteria<T>() .AddNameSearchCriteria<T>(searchExpression) .AddOrder<T>(f => f.Name, Order.Asc) […]

C#,List <T> .Contains() – 太慢?

任何人都可以解释为什么generics列表的Contains()函数如此之慢? 我有一个包含大约一百万个数字的列表,以及不断检查这些数字中是否有特定数字的代码。 我尝试使用Dictionary和ContainsKey()函数做同样的事情,它比列表快大约10-20倍。 当然,我真的不想用Dictionary来达到这个目的,因为它不是用来这样用的。 所以,这里真正的问题是,有什么替代List.Contains(),但不是像Dictionary.ContainsKey()whacky? 提前致谢!