【C#内置泛型委托:Func委托】教程文章相关的互联网学习教程文章

泛型类型扩展中的C#约束被忽略【代码】

public interface ICardEntity { ... }public class Card : ICardEntity { ... }public static class MyExtensions {public static List<T> ToList<T>(this IQueryable<T> query) where T : ICardEntity{ ... } }// DbContext public class ApplicationDbContext : DbContext {public DbSet<Card> Cards { get; set; } }.....var list = dbContext.Cards.ToList(); // -- OK, my extension is called var list2 = dbContext.Cards....

如何在C#中获取打开的泛型上类型参数的数量【代码】

简而言之,这几乎可以解释我的问题…class Foo<T> { ... } var type = typeof(Foo<>); <-- runtime provides a RuntimeType object instance in my real code var paramCount = ((RuntimeType)type).GetGenericParameters().Count; <-- I need this当然,问题在于“ RuntimeType”是mscorlib中的内部类型,因此我无法从代码中访问它. 还有另一种/更好的方法吗? 更新: 我找到了一种“丑陋且可能不安全”的方法来基本实现我所需要的,但...

带有其他类型属性的泛型集合的C#泛型类【代码】

我想实现一个通用的泛型类型,它可以具有另一个泛型类型的集合,因此可以无穷大.目标是使用此类型来构建层次结构列表.所以看起来像这样public class BasicOverviewModel<T> {public T OverViewModel { get; set; }public IEnumerable<BasicOverviewModel<new T>> ChildOverviewModelCollection { get; set; } }有没有可能,或者我选择了错误的解决方案?谢谢…解决方法:您必须在代码中使用另一个通用类型参数TChild. 父子关系变得更加...

c#-具有泛型返回类型的泛型类和方法的委托【代码】

将委托与泛型类一起使用时,会遇到问题.类是泛型的,但方法不是.但是,方法返回类型是泛型类型.public abstract class BaseEntity {public DateTime CreateDateTime { get; set; } = DateTime.Now;public long CreateUserId { get; set; } }public class ClassA : BaseEntity {}class Program {private delegate object MyDelegate(long id);private static MyDelegate _myHandler;static void Main(string[] args) {var genericType ...

C#与泛型的乐趣-相互依赖【代码】

作为实验,我试图编写一个通用的MVP框架. 我开始于:public interface IPresenter<TView> where TView: IView<IPresenter<... {TView View { get; set;} }public interface IView<TPresenter> where TPresenter:IPresenter<IView<... {TPresenter Presenter { get; set; } }显然,这是行不通的,因为无法解析TView和TPresenter的类型.您将永远写Type< Type<....因此,我的下一个尝试如下所示: public interface IView<T> where T:IPre...

C#.NET 4.0和泛型【代码】

我想知道是否有人可以告诉我在C#4.0中这种行为是否可行 我有一个对象层次结构,我想保持强类型化.像这样class ItemBase {}class ItemType<T> where T : ItemBase {T Base { get; set; } }class EquipmentBase : ItemBase {} class EquipmentType : ItemType<EquipmentBase> {}我想要做些什么像这样ItemType item = new EquipmentType();我想要item.Base返回类型ItemBase.基本上,我想知道它是否足够聪明,可以在不进行强类型化的情况...

C#泛型类型的助记符

我经常忘记在定义协变和逆变泛型类型时是否必须使用in或out.在Java中,我有助记符PECS(生产者扩展了超级用户)来帮助我.您知道c#的类似助记符吗?解决方法:当他们称呼它们为“内”和“外”而不是协变和逆变时,他们不是为我们这样做吗?试想一下:我是在“推高”价值观还是在“推高”价值观?如果不确定,请尝试“退出”-它更常见(更容易理解).

c#-通过.NET反射在派生类中调用受保护的泛型方法【代码】

最近我正在尝试在WP7应用中执行类似的操作 我有课abstract class A { //this method has an implementation protected void DoSomething<T, TKey>(Func<T, TKey> func) { //impl here } };我想通过派生类中的反射来调用该受保护的方法:public class B : A {void SomeMethod(Type tableType, PropertyInfo keyProperty){ MethodInfo mi = this.GetType().GetMethod("DoSomething", BindingFlags.Instance | BindingFlags.NonPublic...

C#-反映具有约束的泛型的所有可能排列【代码】

给定具有约束的通用类型:class MyClass<T> where T: Alpha { }以及该约束的实现:class Alpha {} class Bravo : Alpha {} class Charlie : Alpha {}在运行时如何获得所有组合的通用类型?// I want these types at run-time MyClass<Alpha> MyClass<Bravo> MyClass<Charlie> 编辑:基于@ rich.okelly的答案,我认为真正的问题是这样的: 如何在运行时找到实现通用类型约束的所有类型? 因此,如果给定typeof(MyClass<>),我会得到上...

C#嵌套泛型在使用约束时被不同地对待【代码】

当使用嵌套泛型时,编译器在直接使用时会失败,但在使用约束时会正确编译. 例:public static void Test1<V, E>(this Dictionary<V, E> dict)where V : IVertexwhere E : IEdge<V> {}public static void Test2(this Dictionary<IVertex, IEdge<IVertex>> dict){}上面的两个扩展方法表面上具有相同的签名,但是如果我现在想尝试运行以下代码:var dict = new Dictionary<VertexInstance, EdgeInstance>();dict.Test1(); dict.Test2();编...

C#中的嵌套泛型问题【代码】

我有以下定义:public interface IHasId {string Id { get; set; } }public class Something : IHasId {public string Id { get; set; } }public class Queueable<T>where T : IHasId, new() {public T Item { get; set; }public int QueueId { get; set; } }public class Queue<T> where T : Queueable<T>, IHasId, new() {public void Enqueue(T item){}public T Dequeue(){return default(T);} }public class QueueServic...

C#-强制转换泛型参数【代码】

这个问题已经在这里有了答案: > Generics: casting and value types, why is this illegal? 3个您能解释一下为什么第一行代码给我编译器错误,而下一行却没有.public void DoStuff<T>(T obj) {Int32 x = (Int32) obj; // 1. ErrorInt32 y=(Int32)(Object)obj; //2. Works fine }解决方法:为了进行转换,您需要在编译时知道如何从一种类型转换为另一种类型.例如:long l =...

C#在方法调用中扩展泛型类【代码】

我正在尝试编写一个传递通用参数的方法,该方法将使用通用参数扩展类,但是我不想将第二个通用参数传递给该方法.有没有一种方法可以在不传递两个通用参数的情况下实现我要执行的操作?// this base doesn't work because it expects a BaseReportViewModel<D> // I don't want to have to pass in two generic arguments from the child controller // this is what I don't want to do: this.ReportView<Report1ViewModel, Report1...

C#-从一元类型方法(或类)创建并返回多类型泛型【代码】

这是场景: 创建具有多个通用类型的实例,例如:var obj = myBuilder.Combine<TypeA>().And<TypeB>.And<TypeC>.Create();我希望由Create()返回的obj被键入 组合< TypeA,TypeB,TypeC> 我知道我可以使用MakeGenericType创建泛型实例,但是如何在不同的方法上合并并返回泛型类型呢? 我不想从客户端代码中的Create()typecast返回对象.我觉得这是多余的和丑陋的:var obj = (Combined<TypeA, TypeB, TypeC>) myBuilder.Combine<TypeA>()....

C#强制转换泛型类型(如C用户定义的转换)【代码】

C#中有没有一种方法可以对泛型类型执行用户定义的转换? 例如:class Stack<T> {private T x; //should be an array but doesn't matter for this examplepublic Stack(T input){x = input;}public Stack<Q> Convert<Q>(Stack<T> inputStack){//what would go here ? The call is below.} }//main code Stack<int> stack = new Stack<int>(2); Stack<long> longstack = stack.Convert<long>(stack);我可以想象编译器可以在Convert...