Tag: generics

Swift中的generics数组

我一直在玩与不同types的generics类的数组。 用一些示例代码来解释我的问题是最简单的: // Obviously a very pointless protocol… protocol MyProtocol { var value: Self { get } } extension Int : MyProtocol { var value: Int { return self } } extension Double: MyProtocol { var value: Double { return self } } class Container<T: MyProtocol> { var values: [T] init(_ values: T…) { self.values […]

如何在C#中为generics类创build别名?

我如何在C#中执行以下操作? 写这段代码的第一行的正确方法是什么? using KVP<K, V> = System.Collections.Generic.KeyValuePair<K, V>; class C { KVP<int, string> x; }

Java8:lambdaexpression式和重载方法的歧义

我正在玩java8 lambda,我遇到了一个我没有想到的编译器错误。 假设我有一个函数interface A ,一个abstract class B和一个class C带有以A或B为参数的重载方法: public interface A { void invoke(String arg); } public abstract class B { public abstract void invoke(String arg); } public class C { public void apply(A x) { } public B apply(B x) { return x; } } 然后我可以传入一个lambda到c.apply ,并正确parsing为c.apply(A) 。 C c = new C(); c.apply(x […]

C#中Enum.Parse的通用版本

我经常想知道为什么C#还没有实现genericsEnum.Parse 可以说我有 enum MyEnum { Value1, Value2 } 从XML文件/数据库条目我想创build一个枚举。 MyEnum val = (MyEnum)Enum.Parse(typeof(MyEnum), "value1", true); 难道它不能被实现为类似的东西 MyEnum cal = Enum.Parse<MyEnum>("value1"); 这可能看起来像一个小问题,但似乎是一个被忽视的问题。 有什么想法吗?

我可以从一个genericstypes转换为C#中的枚举吗?

我正在写一个实用程序函数,从数据库中获取一个整数,并返回一个types的枚举到应用程序。 这是我试图做的(注意我传入一个数据读取器和列名称,而不是在我的真实函数int ): public static T GetEnum<T>(int enumAsInt) { Type enumType = typeof(T); Enum value = (Enum)Enum.ToObject(enumType, enumAsInt); if (Enum.IsDefined(enumType, value) == false) { throw new NotSupportedException("Unable to convert value from database to the type: " + enumType.ToString()); } return (T)value; } 但是,我不会让(T)value 无法将types“System.Enum”转换为“T”。 另外我读了很多有关使用Enum.IsDefined的综合评论。 性能明智,这听起来很差。 我还能如何保证有效的价值?

如果types只被称为System.Type,如何得到一个types的默认值?

如果我想要一个返回给定types的默认值,方法是generics的方法,我可以返回一个默认值,如下所示: public static T GetDefaultValue() { return default(T); } 如果我只有types作为System.Type对象,我可以做类似的事情吗? public static object GetDefaultValue(Type type) { //??? }

generics使用语句:使用ISet <> = System.Collections.Generic.ISet <>

由于我使用两个不同的通用集合命名空间( System.Collections.Generic和Iesi.Collections.Generic ),所以我有冲突。 在项目的其他部分,我使用的是nunit和mstest框架,但有资格,当我打电话Assert我想使用nunit版本 using Assert = NUnit.Framework.Assert; 这很好,但我想用genericstypes做同样的事情。 但是,下面的行不起作用 using ISet = System.Collections.Generic.ISet; using ISet<> = System.Collections.Generic.ISet<>; 有谁知道如何告诉.net如何使用generics使用声明?

Java通用返回types

我想写一个方法,可以接受一个types参数(或任何方法可以找出types),并返回一个这种types的值,所以我不必强制返回types。 这里是一个方法: public Object doIt(Object param){ if(param instanceof String){ return "string"; }else if(param instanceof Integer){ return 1; }else{ return null; } } 当我调用这个方法,并传入一个string,即使我知道返回types将是一个string,我必须投入返回对象。 这与int参数类似。 我该如何写这个方法来接受一个types参数,并返回这个types?

C#generics是否具有性能优势?

我有许多代表各种实体的数据类。 哪一个更好:使用generics和接口编写generics类(比如打印或输出XML),或者编写一个单独的类来处理每个数据类? 是否有performance收益或其他利益(除了节省我分开的课程时间)?

为什么从SQL Server 2008及更高版本中不支持generics派生的CLRtypes?

以下代码实现了从generics(SortedDictionary)派生的UDT: [Serializable] [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, MaxByteSize = 8000)] public class udtMassSpectra : SortedDictionary<float, float>, INullable, IBinarySerialize, ICloneable, IDisposable { … } 创buildtypes(T-SQL): CREATE TYPE dbo.udtMassSpectra EXTERNAL NAME MassSpectra.udtMassSpectra; 抛出exception: 程序集“MassSpectra”中的消息10331,级别16,状态1,行1types“udtMassSpectra”派生自CLRtypes不支持的genericstypes。 是什么原因? 除了在私有成员中隐藏基类之外,是否有任何解决方法? 此代码在SQL Server 2005上正常工作。