Tag: generics

IList在c#中使用协方差和逆变,这可能吗?

这有可能吗? (我没有对阵2010年,所以我不能自己尝试,对不起) public interface IComplexList where TOutput : TInput { public IEnumerator GetEnumerator(); public void Add(TInput item); } public interface IList : IComplexList { } 如果我做对了,你可以用它来在同一个界面中实际实现协方差和逆变。

从非generics类重写抽象generics方法

基类 class Drawer { public abstract void Draw(T type); } 派生类#1 class ADrawer : Drawer { public override void Draw(List list) { foreach (var a in list) { DrawA(a); } } public void DrawA(Agent a) { //draw code here } } 派生类#2 class AnotherDrawer : Drawer { public override void Draw(T number) { if (number […]

调用类型参数的方法

有没有办法做这样的代码: class GenericClass { void functionA() { TA(); } } 或者,如何调用类型参数的函数(类型是我的自定义类)。

在LINQ Query的where子句中传递int数组

有一节课 Public class Student { int id; int rollNum; String Name; } 一个方法 Public List GetAllStudents() { var studentList = GetMeAll(); // Simple select * query to get all students //unfortunately i can’t make changes in this method so have to write a linq query to //filter data. //getting int array ids correctly from some […]

如何在C#中传递通配符

我有以下内容: public class Foo : Goo where T: SomeClass, new() 我知道 ? 在C#中不是一个真正的通配符,但是,你如何在C#中正确地编写它,以便SomeClass可以将任何类作为参数? 我尝试使用对象,但后来我得到一个错误“……没有来自……的隐式引用转换” 谢谢!

接口基类通过generics方法实例化

我有一个界面,例如,为此看起来像这样: interface IFoo where TEnum : struct, IConvertible, IComparable, IFormattable { TEnum MyEnum { get; set; } } 然后我有一个抽象的基类,如下所示: abstract class FooBase : IFoo where TEnum : struct, IConvertible, IFormattable, IComparable { public TEnum MyEnum { get; set; } } 然后我inheritance基类,如下所示: class MyFoo : FooBase { public enum MyFooEnum { Foo1, Foo2, } } 如何从类型参数FooBase的generics方法实例化FooBase […]

如何使用generics将参数传递给非generics方法?

为什么以下代码无法编译? 如果generics类型是“int”,“bool”,“char”等,我如何创建一个调用适当的“BitConverter.GetBytes”重载的generics方法? 更一般地说,如何创建一个基于generics参数类型调用非generics方法的generics方法? using System; public class Test { public static void Main() { var f = new Foo(); f.GetBytes(10); // should call BitConverter.GetBytes(int); f.GetBytes(true); // should call BitConverter.GetBytes(bool); f.GetBytes(‘A’); // should call BitConverter.GetBytes(char); } } public class Foo { public byte[] GetBytes (TSource input) { BitConverter.GetBytes(input); } }

制作具有多种类型的generics

我有一大堆代码,有时我需要创建一个新的generics类型,但具有未知数量的generics参数。 例如: public object MakeGenericAction(Type[] types) { return typeof(Action).MakeGenericType(paramTypes); } 问题是,如果我的数组中有多个Type,那么程序将崩溃。 在短期内,我提出了类似这样的事情作为一个止损。 public object MakeGenericAction(Type[] types) { if (types.Length == 1) { return typeof(Action).MakeGenericType(paramTypes); } else if (types.Length ==2) { return typeof(Action).MakeGenericType(paramTypes); } ….. And so on…. } 这确实有效,并且很容易覆盖我的场景,但它似乎真的很hacky。 有没有更好的方法来处理这个?

如何获得类型的类

我需要使用如下方法: DoSomething(); 但我不知道我有哪种类型,只有类型的对象。 如果我只有以下情况,我该如何调用此方法: Type typeOfGeneric;

在generics方法中无法将类型更改为可为空

我正在创建一个通用的转换器 以下是通用转换器的示例代码 bool TryReaderParse(object data, out TType value) { value = default(TType); Type returnType = typeof(TType); object tmpValue = null; if (returnType == typeof(DateTime)) { tmpValue = StringToDatetime(data.ToString()); } else if (returnType == typeof(DateTime?)) // THIS IF FIRES { tmpValue = StringToNullableDatetime(data.ToString()); } value = (TType)Convert.ChangeType(tmpValue, returnType); // THROWS } public DateTime? StringToNullableDatetime(string date) { […]