Tag: generics

如何在generics方法中过滤集合

我有两个类,它具有以下属性 Class A { public int CustID { get; set; } public bool isProcessed { get; set; } } Class B { public int EmpId{ get; set; } public bool isProcessed { get; set; } } 我创建了一个接受所有这些类的generics方法。’isProcessed’属性在这两个类中都很常见。 public void ProceesData(IList param1, string date1) { } 我需要关注的事情 在ProcessData方法内部我想过滤具有isProcessed标志的项目为“True”。 此外,我想迭代此集合,并需要为IsProcessed属性设置值。 注意:我更喜欢使用reflection的解决方案,因为属性名称是常量(即“IsProcessed”) 任何人都可以帮助这个。

C#动态通用列表

我想创建一个通用的List ,其类型在运行时声明。 我可以做到以下几点,但由于它是动态的,我怀疑存在速度惩罚。 我正在为异国情调的数据库编写一个包装器,因此速度至关重要。 List gdb = new List() 我在动态generics类型中阅读了这篇文章 ,但无法让它发挥作用。 具体来说,该对象不会显示为List,因此没有添加方法。 Type ac; switch (trail[dataPos].Type) { case GlobalsSubscriptTypes.Int32: ac = typeof(System.Int32); break; case GlobalsSubscriptTypes.Int64: ac = typeof(System.Int64); break; default: ac = typeof(System.String); break; } var genericListType = typeof(List); var specificListType = genericListType.MakeGenericType(ac); var gdb = Activator.CreateInstance(specificListType); 如何让gdb显示为以下之一: List List List

如何添加通用dependency injection

使用只读api服务并利用generics将操作打包到基于约定的过程中。 存储库界面: public interface IRepository where TEntityType:class { Task<EntityMetadata> GetMetaAsync(); } 存储库实现: public class Repository : IRepository where TEntityType:class { public Repository(string connectionString) { // initialization } public async Tas<EntityMetadata> GetMetaAsync() { // implementation } } 在Startup.cs -> ConfigureServices : services.AddSingleton<IRepository> ( p=> new Repository(connectionString)); services.AddSingleton<IRepository> ( p=> new Repository(connectionString)); // and so on 控制器: […]

如何获取传递给Method的Generic Func 的方法名称

我正在尝试使用.Net闭包将函数的方法名称传递给对象,如下所示: 方法签名 public IEnumerable GetData(Func<IEnumerable> WebServiceCallback) where T : class { // either gets me ‘b__3′ var a = nrdsWebServiceCallback.Method.Name; var b = nrdsWebServiceCallback.GetInvocationList(); return WebServiceCallback(); } 我这样称呼它: SessionStateService.Labs = CacheManager.GetData(() => WCFService.GetLabs(SessionStateService.var1, SessionStateService.var2)); 看到’b__3’而不是WCFServce.GetLabs(..)等

如果要求List ,为什么我不能返回List ?

我理解,如果S是T的子类,则List 不是 List 。 精细。 但是接口有不同的范例:如果Foo实现了IFoo ,那么为什么List不是(一个例子) List ? 因为可能没有实际的类IFoo ,这是否意味着我在暴露List时总是必须List列表中的每个元素? 或者这只是糟糕的设计,我必须定义我自己的集合类ListOfIFoos才能使用它们? 对我来说似乎都不合理…… 考虑到我正在尝试编程接口,那么暴露这样一个列表的最佳方式是什么? 我目前正倾向于将List内部存储为List 。

c#exit使用lambda的genericsForEach

有谁知道是否可以退出使用lambda的通用ForEach? 例如 someList.ForEach(sl => { if (sl.ToString() == “foo”) break; // continue processing sl here // some processing code } ); 这段代码本身不会编译。 我知道我可以使用常规foreach但为了保持一致性我想使用lambda。 非常感谢。

如何注册通用服务

我打算将我的系统移动到通用服务层。 public interface IAbcService where TEntity : class public class AbcService : IAbcService where TEntity : class 我尝试了一些东西,但它不起作用。 services.AddTransient<typeof(IAbcService), AbcService(); …. …. …. 我正在使用我的一些实体,并且我正在尝试将其添加到属性中。 如何在asp.net核心中注册通用服务?

generics类型的隐式运算符

使用隐式运算符有什么问题,如下所示: //linqpad c# program example void Main() { var testObject = new MyClass() { Value = 1 }; var add = 10 + testObject; //implicit conversion to int here add.Dump(); // 11 } class MyClass { public T Value { get; set; } public static implicit operator T (MyClass myClassToConvert) { return myClassToConvert.Value; } } […]

在C#中强制通用接口实现

无论如何强制通用定义的约束来实现“通用接口”……也就是说,我希望类支持传递接口和限制它的generics类,以便类实现接口。 例如,如果我说: MyGenericClass.DoSomething(); 这应该受到限制,以便MyImplementation实现IMyInterface 据我所知,可以通过实现 public class Dynamic_Loader where S: T 现在,无论如何也迫使T成为一个界面? 编辑:这样做的目的是: private static List interfaceList = new List(); public static List InterfaceList {get { return interfaceList;}} public static void Add(S input) { interfaceList.Add(input);} 并且列表仅限于接口(因为它应该返回某些接口的实现)

Action的通用约束无法按预期工作

我无法理解为什么以下代码段不会给我一个错误 public void SomeMethod(T arg) where T : MyInterface { MyInterface e = arg; } 但是这个,我期望由于generics类型约束而工作 private readonly IList<Action> myActionList = new List<Action>(); public IDisposable Subscribe(Action callback) where T: MyInterface { myActionList.Add(callback); // doesn’t compile return null } 给出了这个错误 cannot convert from ‘System.Action’ to ‘System.Action’ 我正在使用VS2012 sp1和.NET 4.5。 任何人都可以解释为什么约束不允许这个编译?