Questions tagged «generics»

泛型是在多种语言中发现的参数多态形式,包括.NET语言,Java,Swift和Rust。


27
将通用列表/可枚举转换为数据表?
我有几种方法可以返回不同的通用列表。 .net中是否存在任何类静态方法或将任何列表转换为数据表的方法?我能想象的唯一一件事就是使用反射来做到这一点。 如果我有这个: List<Whatever> whatever = new List<Whatever>(); (下一个代码当然不起作用,但是我希望有以下可能性: DataTable dt = (DataTable) whatever;
261 c#  list  generics  datatable 


4
ReSharper警告:“通用类型的静态字段”
public class EnumRouteConstraint<T> : IRouteConstraint where T : struct { private static readonly Lazy<HashSet<string>> _enumNames; // <-- static EnumRouteConstraint() { if (!typeof(T).IsEnum) { throw new ArgumentException( Resources.Error.EnumRouteConstraint.FormatWith(typeof(T).FullName)); } string[] names = Enum.GetNames(typeof(T)); _enumNames = new Lazy<HashSet<string>>(() => new HashSet<string> ( names.Select(name => name), StringComparer.InvariantCultureIgnoreCase )); } public bool Match(HttpContextBase httpContext, …

3
具有多个约束的通用方法
我有一个具有两个通用参数的通用方法。我试图编译下面的代码,但是它不起作用。是.NET的限制吗?是否可能对不同的参数具有多个约束? public TResponse Call<TResponse, TRequest>(TRequest request) where TRequest : MyClass, TResponse : MyOtherClass
251 c#  generics  .net-3.5 

4
Scala:抽象类型与泛型
我正在阅读《 Scala之旅:抽象类型》。什么时候使用抽象类型更好? 例如, abstract class Buffer { type T val element: T } 而不是例如泛型 abstract class Buffer[T] { val element: T }

11
如何在Java中使用Class <T>?
在这个问题上,对泛型及其背后的作用进行了很好的讨论,因此我们都知道泛型Vector&lt;int[]&gt;是整数数组的向量,并且HashTable&lt;String, Person&gt;是一个表,其键是字符串和值Persons。但是,让我感到困扰的是的用法Class&lt;&gt;。 Java类Class应该也采用一个模板名称,(否则,Eclipse中的黄色下划线告诉我)。我不明白该放什么。整个Class对象就是当您不完全了解有关对象的信息(例如反射)时。为什么要让我指定Class对象将容纳哪个类?我显然不知道,或者我不会使用该Class对象,而是使用特定的对象。


3
通用字典不区分大小写的访问
我有一个使用托管dll的应用程序。这些dll之一返回通用字典: Dictionary&lt;string, int&gt; MyDictionary; 字典包含大小写键。 另一方面,我得到了潜在键(字符串)的列表,但是我不能保证这种情况。我试图使用键在字典中获取值。但是当然,由于我的案例不匹配,因此以下操作将失败: bool Success = MyDictionary.TryGetValue( MyIndex, out TheValue ); 我希望TryGetValue具有Mcase doc中提到的忽略大小写标志,但这似乎对通用词典无效。 有没有一种方法可以忽略字典大小写而获得该词典的值?是否有比使用适当的StringComparer.OrdinalIgnoreCase参数创建字典的新副本更好的解决方法?
242 c#  generics  dictionary 

7
Java泛型类型擦除:何时以及何时发生?
我在Oracle网站上了解了Java的类型擦除。 什么时候出现类型擦除?在编译时还是在运行时?该类何时加载?该类何时实例化? 许多站点(包括上面提到的官方教程)都说类型擦除在编译时发生。如果在编译时完全删除了类型信息,那么在没有类型信息或错误类型信息的情况下调用使用泛型的方法时,JDK如何检查类型兼容性? 考虑以下示例:说说类A有一个方法empty(Box&lt;? extends Number&gt; b)。我们编译A.java并获得类文件A.class。 public class A { public static void empty(Box&lt;? extends Number&gt; b) {} } public class Box&lt;T&gt; {} 现在,我们创建另一个类B,该类empty使用非参数化参数(原始类型)调用该方法:empty(new Box())。如果我们编译B.java与A.class在类路径中,javac的是足够聪明提出一个警告。因此A.class ,其中存储了一些类型信息。 public class B { public static void invoke() { // java: unchecked method invocation: // method empty in class A is applied to …

6
为什么Java泛型不支持基本类型?
为什么Java中的泛型只能用于类,而不能用于原始类型? 例如,这可以正常工作: List&lt;Integer&gt; foo = new ArrayList&lt;Integer&gt;(); 但这是不允许的: List&lt;int&gt; bar = new ArrayList&lt;int&gt;();
236 java  generics  primitive 


11
字符串的通用类型转换
我有一个要用于存储另一个类的“属性”的类。这些属性仅具有名称和值。理想情况下,我希望能够添加类型化的属性,以便返回的“值”始终是我想要的类型。 该类型应始终为原始类型。此类继承了一个抽象类,该抽象类基本上将名称和值存储为字符串。这个子类将为基类增加一些类型安全性(并为我节省一些转换)。 因此,我创建了一个(大致)这样的类: public class TypedProperty&lt;DataType&gt; : Property { public DataType TypedValue { get { // Having problems here! } set { base.Value = value.ToString();} } } 所以问题是: 是否有“通用”方式将字符串转换回原始类型? 我似乎找不到任何通用的接口来转换转换(像ITryParsable这样的东西会是理想的!)。

10
创建其构造函数需要参数的泛型类型的实例?
如果BaseFruit有一个接受的构造函数,int weight我可以用这种通用方法实例化一块水果吗? public void AddFruit&lt;T&gt;()where T: BaseFruit{ BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); } 在注释后面添加了一个示例。似乎只有提供BaseFruit无参数构造函数,然后通过成员变量填写所有内容,我才能做到这一点。用我的真实代码(不是关于水果),这是不切实际的。 -更新- 因此,看来无论如何都无法通过约束来解决。从答案中可以找到三种候选解决方案: 工厂模式 反射 活化剂 我倾向于认为反射是最不干净的一种,但是我无法在其他两种之间做出选择。
229 c#  .net  generics 

13
使用lambda表达式将对象列表从一种类型转换为另一种类型
我有一个foreach循环,读取一种类型的对象列表并产生另一种类型的对象列表。有人告诉我,lambda表达式可以达到相同的结果。 var origList = List&lt;OrigType&gt;(); // assume populated var targetList = List&lt;TargetType&gt;(); foreach(OrigType a in origList) { targetList.Add(new TargetType() {SomeValue = a.SomeValue}); } 任何帮助将不胜感激-我是lambda和linq的新手,谢谢,s
224 c#  generics  lambda 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.