Tag: generics

C#:传递通用对象

我想要一个通用的打印function… PrintGeneric(T)…在下面的例子中,我缺少什么? 一如既往地感谢您的帮助/见解…… public interface ITest {} public class MyClass1 : ITest { public string myvar = “hello 1”; } public class MyClass2 : ITest { public string myvar = “hello 2”; } class DoSomethingClass { static void Main() { MyClass1 test1 = new MyClass1(); MyClass2 test2 = new MyClass2(); Console.WriteLine(test1.myvar); Console.WriteLine(test2.myvar); Console.WriteLine(test1.GetType()); PrintGeneric(test1); PrintGeneric(test2); […]

我应该使用带有Entity Framework 5的通用存储库吗?

我目前正在使用具有通用存储库和工作单元模式的entity framework。 我的模型类似于本文中描述的模型 我过去曾使用Generic Repositories,并且非常享受它可以提供的全局function。 但是,在将它与Entity Framework一起使用时,我似乎每天都遇到更多问题。 在处理父/子/交汇关系时,这些问题似乎更多。 使用带有EF的通用存储库开始在我的口中留下不好的味道,我开始认为使用带有EF的通用存储库是错误的方法。 有人可以帮助引导我朝正确的方向发展吗?

初始化IList C#

有没有特定的方法来初始化IList ? 这似乎不起作用: IList allFaqs = new IList(); // Error I get here: Cannot create an instance of the interface ‘IList’ ReSharper建议像这样初始化它: IList allFaqs = null; 但是当我去添加项目列表时,这不会导致空引用exception吗? 或者我应该只使用List ? 谢谢!

如何将字典内容复制到C#中的新字典?

如何将Dictionary复制到另一个new Dictionary以便它们不是同一个对象?

如何将这两个类似的方法重构为一个?

我已经看到一些使用’T’的样本使一个方法可以重复用于不同类的generics集合,但我从来没有真正深入到它或理解样本。 我想知道是否有可能将下面的两种方法合二为一,这样做的缺点是(性能方面)。 任何人? [NonAction] public List ToSelectList(IEnumerable departments, string defaultOption) { var items = departments.Select(d => new SelectListItem() { Text = d.Code + ” – ” + d.Description, Value = d.Id.ToString() }).ToList(); items.Insert(0, new SelectListItem() { Text = defaultOption, Value = “-1” }); return items; } [NonAction] public List ToSelectList(IEnumerable functions, string defaultOption) { var […]

使用unity xml config注册具有嵌套generics的接口

如果我有一个实现通用接口的类,可以使用unity xml配置来配置它。 public interface IReader { } public class Fund { } public class FundReader : IReader { } 和统一xml: 这只是使用以下代码: var container = new UnityContainer().LoadConfiguration(); var fundReader = container.Resolve<IReader>(); 但是,在某些情况下,阅读器中使用的类型周围有一个包装器。 例如,添加以下两个类: public class Wrapper { } public class WrappedFundReader : IReader<Wrapper> { } 如果我将以下内容添加到unity配置: 然后尝试使用以下方法解决它: var wrappedReader = container.Resolve<IReader<Wrapper>>(); 我得到以下exception: InvalidOperationException – The current […]

覆盖inheritance的generics方法

我在基类中有这个代码 protected virtual bool HasAnyStuff(TObject obj) where TObject:class { return false; } 在儿童class,我压倒一切 protected override bool HasAnyStuff(Customer obj) { //some stuff if Customer.sth etc return false; } 我收到了这个错误 ”’类型参数声明必须是标识符而不是类型”’ 我在这做错了什么?

将generics限制为可以为null的事物

我想限制一个通用的我编码到任何可以为null东西。 那基本上是任何类+ System.Nullable (例如int?等)。 对于课堂部分,它很容易: public class MyGeneric where T : class {} 但是,这不允许我这样做: var myGeneric = new MyGeneric(); 或这个: var myGeneric = new MyGeneric<Nullable>(); 编译器抱怨: 错误CS0452:类型’int?’ 必须是引用类型才能在generics类型或方法’Test.MyGeneric’中将其用作参数’T’ 所以我尝试将addind System.Nullable作为T可接受类型: public class MyGeneric where T : class, System.Nullable {} 但它不会这样做。 编译器返回以下错误: 错误CS0717:’System.Nullable’:静态类不能用作约束 然后我试过了 public class MyGeneric where T : class, INullable {} 它确实编译,但是当我这样做时: var myGeneric […]

为通用接口配置装饰器,并使用Simple Injector中的非通用接口参数将所有实例注入构造函数

我一直在使用与这篇优秀文章中描述的模式非常相似的模式,将命令和查询作为对象。 我也使用SimpleInjector作为DI容器。 唯一显着的区别是,控制器对某些ICommandHandler采取显式依赖关系。我希望控制器依赖于一个对象(一个Dispatcher ),该对象将接受一个ICommand实例并解析该命令的正确处理程序。 这将减少构造函数需要采用的参数数量,并使整个事物更容易使用。 所以我的Dispatcher对象构造函数如下所示: public CommandAndQueryDispatcher(IEnumerable commandHandlers, IEnumerable queryHandlers) { } 我的CommandHandler接口如下所示: public interface ICommandHandler : ICommandHandler where TCommand : ICommand { void Execute(TCommand command, ICommandAndQueryDispatcher dispatcher); } public interface ICommandHandler { void Execute(object command, ICommandAndQueryDispatcher dispatcher); } 典型的命令处理程序如下所示: public abstract class CommandHandlerBase : ICommandHandler where TCommand : ICommand { public abstract void […]

有没有办法获得类型Func ?

精简版 : 我们可以使用以下方法获取func Func : typeof(Func) 但是如果我想获得Func的类型,我应该使用什么,或者它可以做什么呢? 显然,这不编译: typeof(Func) 长版: 考虑以下场景,我有两个类似的方法,我想使用Reflection得到第二个( Func ): public void Foo(Func func) { } public void Foo(Func func) { } 我正在尝试这个: var methodFoo = typeof (Program) .GetMethods() .FirstOrDefault(m => m.Name == “Foo” && m.GetParameters()[0] .ParameterType .GetGenericTypeDefinition() == typeof (Func)); 但由于Func和Func的generics类型定义相等,它给出了第一种方法。 要解决这个问题,我可以执行以下操作: var methodFoo = typeof (Program) .GetMethods() .FirstOrDefault(m => m.Name […]