【c# – 使用泛型问题并使用运行时类型而不是(通用)T】教程文章相关的互联网学习教程文章

c# – 泛型方法的多个约束?【代码】

我有以下四种重载方法Add:public IEnumerable<TrackInfo> Add(DataContext dataContext, IEnumerable<TrackInfo> tracks){return tracks.Select(t => Add(dataContext, t));}public IEnumerable<TrackInfo> Add(DataContext dataContext, IEnumerable<string> files){return files.Select(f => Add(dataContext, f));}public TrackInfo Add(DataContext dataContext, TrackInfo track){dataContext.TrackInfos.InsertOnSubmit(tra...

c# – 有什么方法可以使扩展方法优先于泛型方法?

在.NET中,如果存在具有方法Foo< T>(T t)(无约束)和方法Foo(字符串s)的类,则调用Foo(“test”)调用接受字符串的Foo.这一切都很好,除非字符串重载是一种扩展方法,在这种情况下,总是调用泛型版本.这个问题有一些解决方法,还是我运气不好?解决方法:简答:不 在C# 5.0 Language Specification的第163页中,我们可以看到,在对方法组(一组重载方法)进行了所有重载解析后,并且找不到合适的候选项时,编译器将尝试搜索适用的扩展方法.这意味着...

c# – 调用从封闭泛型继承的methodinfo【代码】

private static void Main(string[] args){var messageType = typeof (SampleHandler1);var genericType = typeof (IConsume<>).MakeGenericType(messageType);var genericArguments = genericType.GetGenericArguments();var consumeMethod = genericType.GetMethod("Consume");var constructorInfo = genericArguments[0].GetConstructor(Type.EmptyTypes);var classObject = constructorInfo.Invoke(new object[] {});var argsx...

c# – 为什么这个扩展方法适用于泛型但不适用于集合基类型?【代码】

在我的项目中,我有以下类结构:public interface IUpdateableModel {ModelState State { get; set; }void ResetState(); }public abstract class UpdateableModel : IUpdateableModel {public ModelState State { get; set; }public void ResetState(){//Perform reset logic} }public class MyUpdateableClass : UpdateableModel {//Some properties. }现在我尝试添加一些扩展方法以用于IUpdateable集合:public static class Upd...

C#2中泛型的限制【代码】

我正在阅读Jon skeet的惊人书籍“C#in depth(3d version)”.我坚持p.99处理泛型缺乏逆转.class TestGenericVariance {public static void Main(string[] args){IComparer<IShape> x =new AreaComparer();List<Circle> circles = new List<Circle>();circles.Add(new Circle());circles.Add(new Circle());//The following line is invalid, Sort expects IComparer<Circle>circles.Sort(x);}public interface IShape{}public class...

c# – 如何使用反射将对象添加到类的实例的泛型列表属性中【代码】

我下面有一个班级结构.我收到了这个错误.我错过了什么吗?Object does not match target type.阶级结构public class Schedule {public Schedule() { Name = ""; StartDate = DateTime.MinValue; LectureList = new List<Lecture>(); }public string Name { get; set; }public DateTime StartDate { get; set; }public List<Lecture> LectureList { get; set; } }public class Lecture {public string Name { get; set; }public int...

c# – 取消订阅泛型类的事件,该泛型类的类型参数在泛型方法中指定【代码】

如何取消订阅泛型类的事件,该泛型类的类型参数在泛型方法中指定如下?public class ListLayoutControl : Control {NotifyCollectionChangedEventHandler handler = null;public void AttachTo<T, U>(T list) where T : INotifyCollectionChanged, ICollection<U>{handler = delegate (object sender, NotifyCollectionChangedEventArgs e){UpdateLayout(list.Count);};list.CollectionChanged += handler;}protected override void...

c# – 根据固定的类型列表多次调用泛型方法【代码】

我有一个通用方法Method< T>(),我有一个类型列表,如下所示:public static readonly Type[] AllPossibleTypes = new Type[]{typeof(A),typeof(B),typeof(C),typeof(D) };在我的代码中有多个地方我必须切换大小写并进行模式匹配,然后最后手动调用每个例如方法&LT a取代;方法&LT B个方法&LT c取代; …然后当我决定在可能的类型列表中添加更多类型时,我必须记住修复代码中的许多地方.是否有任何方法可以迭代可能的类型并使其可用于泛型...

c# – “方法未在泛型类型定义中声明”错误【代码】

我试图像这样生成动态方法:MyList<T> CreateList<T>(T arg) => new MyList<T>(){arg};这是文档中的程序修改(https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-define-a-generic-method-with-reflection-emit的原始程序).我只想调用基类List中定义的Add方法.我通过TypeBuilder.GetMethod方法获取此方法信息:public class MyList<T> : List<T> { } public static void Main() {var asmName = new...

c# – 使用反射调用泛型方法时,“对象与目标类型不匹配”【代码】

我搜索了几个关于类似问题的不同帖子,但似乎没有解决我的特定问题(尽管我相信它们离我不远). 以下链接是我的问题的最接近的版本 “Object does not match target type” when calling methods using string in C# 我的问题和链接中的问题唯一的区别是我正在调用泛型方法. 当我打电话时,我得到错误“对象与目标类型不匹配”,但是类型,形成我能说的绝对匹配.这是我已经复制了我的问题的示例代码. 任何帮助,将不胜感激class Program {...

C#泛型:如何在lambda表达式中使用struct约束和nullables时避免代码重复【代码】

说我有一个功能,如:public TProperty Foo<TClass, TProperty>(TClass instance, Expression<Func<TClass, TProperty>> expression){...}但后来我意识到它应该只用于值类型,所以我添加了一个约束public TProperty Foo<TClass, TProperty>(TClass instance, Expression<Func<TClass, TProperty>> expression)where TProperty : struct{...}但我后来发现,这不会让我传递一个可以为空的TProperty的表达式.我能看到处理这个问题的唯一方...

c# – 使用泛型问题并使用运行时类型而不是(通用)T【代码】

为了尽可能容易地解决问题,我试图实现一个通用池系统,只要它们实现IBaseComponent就可以处理任意数量的具体类. 所以,在我管理池的类中,我有一个Pool of Dictionarys:Dictionary<Type, Pool<IBaseComponent>> pools;因为这将允许我创建尽可能多的实现IBaseComponent的类(这是一个非常“低级别”的接口,所以可以这么说 – 所以实现它的类不会兼容得太多),并且可以有每个人都有一个游泳池 现在,我正在运行的问题是第一次将IBaseCompo...

c# – 如何使用autofac注册开放泛型类型,封闭泛型类型和装饰?【代码】

我使用Autofac作为我的IoC容器.我有: > IRepository<&gt ;,我的存储库界面;> DbContextRepository<>,使用EntityFramework的DbContext的存储库的通用实现;>部件中的一些封闭类型存储库,例如PersonRepository:DbContextRepository< Person&gt ;;>还有一个RepositoryDe??corator<>,用一些标准的额外行为来装饰我的存储库; 我正在使用autofac将它们全部注册为:builder.RegisterGeneric(typeof(DbContextRepository<>)).Named("repo"...

c# – 如何检查值是否可以转换为泛型类型?【代码】

我有一个方法包装一些外部API调用,通常返回null.当它这样做时,我想返回一个默认值.该方法看起来像这样public static T GetValue<T>(int input) {object value = ExternalGetValue(input);return value != null ? (T)value : default(T) }问题是(T)值可能会抛出无效的强制转换异常.所以我想我会改成它var value = ExternalGetValue(input) as Nullable<T>;但这需要T:struct,我也希望允许引用类型. 然后我尝试添加一个可以处理两者的...

c# – 在重载方法中使用泛型类型【代码】

我有一个通用的方法:public bool DoSomething<T>(T item) where T: IBase {return DoSomethingSpecific(item); }public bool DoSomethingSpecific(IBase item) {return true; }public bool DoSomethingSpecific(IAdvanced item) {return false; }请注意,IAdvanced接口从IBase接口派生/继承. 我发现如果我调用DoSomething,其中项目的类型为IAdvanced,它仍然总是返回false.我不明白这一点.我知道,因为IAdvanced是一个类型IBase(因为...