草庐IT

Generics

全部标签

c# - 如何利用泛型来填充派生类模型以避免代码重复?

我有2种类型,每种类型都有不同的处理逻辑。基于该处理,我正在准备一个结果并将其返回给消费者(mvc应用程序、控制台应用程序等)类型1类型2现在的问题是一些代码在这两种类型中是通用的。唯一不同的部分是两种类型的类(Type1Manager,Type2Manager)它实际上包含处理type1和type2以及准备结果的逻辑(Type1Model,Type2Model)。publicclassVariant{publicintId{get;set;}publicstringName{get;set;}publicListSubvariants{get;set;}}publicclassSub

c# - 注册 'half-closed' 通用组件

我有两个接口(interface):publicinterfaceIQuery{}publicinterfaceIQueryHandlerwhereTQuery:IQuery{TResultHandle(TQueryq);}IQueryHandler的封闭实现示例:publicclassEventBookingsHandler:IQueryHandler>{privatereadonlyDbContext_context;publicEventBookingsHandler(DbContextcontext){_context=context;}publicIEnumerableHan

c# - 在 C# 中,Type.FullName 何时返回 null?

MSDNforType.FullName说这个属性返回nullifthecurrentinstancerepresentsagenerictypeparameter,anarraytype,pointertype,orbyreftypebasedonatypeparameter,oragenerictypethatisnotagenerictypedefinitionbutcontainsunresolvedtypeparameters.我数了五种情况,发现一个比一个更不清楚。这是我尝试构建每个案例的示例。usingSystem;usingSystem.Collections.Gene

c# - Entity Framework 通用存储库错误

我正在尝试为我的EntityFramework存储库创建一个非常通用的泛型存储库,它具有基本的CRUD语句并使用接口(interface)。我先撞到了砖墙头,然后被撞倒了。这是我的代码,使用EntityFramework模型在控制台应用程序中编写,带有一个名为Hurl的表。简单地尝试通过其ID拉回对象。这是完整的应用程序代码。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data.Objects;usingSystem.Linq.Expressions;

c# - Fluent API 的类型推断

我有以下扩展方法:publicstaticIFooFoo(thisIFluentApiapi,Actionaction);publicstaticIFooFoo(thisIFluentApiapi,Funcfunc);publicstaticIBarBar(thisIFoofoo);publicstaticvoidFooBar(thisIBarbar,Actionaction);publicstaticvoidFooBar(//action);通用接口(interface)总是派生自它们对应的非通用接口(interface)。不幸的是,要完成这项工作:api.Foo(x=>Return

c# - 在运行时添加通用约束?

我对此很困惑,所以如果有人有任何想法。我有通用方法publicvoidFoo(TClassitem)whereTClass:class{}我想从另一个泛型方法调用这个方法,但是这个泛型方法没有类型约束“whereTClass:class”publicvoidBar(Titem){this.Foo(item);}这行不通,我得到了错误“类型‘T’必须是引用类型才能将其用作参数‘TClass’”我明白了。但我的问题是-如果它是一个类,我可以用C#语法做些什么来“过滤”泛型类型“T”以将其传递给“this.Bar”。像....publicvoidBar(Titem){if(typeof(T)

c# - CodeDom 泛型类型约束

有没有办法用CodeDom生成类约束。因为当我使用类似的东西时varmethod=newCodeMemberMethod();vargenericParam=newCodeTypeParameter("InterfaceType");genericParam.Constraints.Add("class");method.TypeParameters.Add(genericParam);生成的代码是这样的privateInterfaceTypeGetImpl()whereInterfaceType:@class{}我发现最好的解决方法是在课前使用前导空格genericParam.Con

c# - 使用反射创建通用委托(delegate)

我有以下代码:classProgram{staticvoidMain(string[]args){newProgram().Run();}publicvoidRun(){//worksFunc>static_delegate=newFunc>(SomeMethod);MethodInfomi=this.GetType().GetMethod("SomeMethod").MakeGenericMethod(newType[]{typeof(String)});//throwsArgumentException:ErrorbindingtotargetmethodFunc>reflecti

c# - 从 IDictionary 转换为通用 IDictionary 的最佳方式

我有一个IDictionary字段,我想通过IDictionary类型的属性公开它转换非常困难,因为我不知道我能做什么.Cast()IDictionaryto.最好的我有:IDictionaryproperties;protectedvirtualIDictionaryProperties{get{return_properties.Keys.Cast().ToDictionary(name=>name,name=>_properties[name]asdynamic);}} 最佳答案 如果IDictionary的基础类型不执行ID

c# - 具有默认值的 XmlSerializer 和 List<T>

我在序列化和反序列化具有List类型成员的类时观察到一个奇怪的行为在构建时填充了默认值。与基于数组的属性不同,类型为List的属性不会在XmlSerializer反序列化时被清空。这是我的代码:publicclassProgram{publicclassConfig{publicConfig(){Test1=newList(){"A","B"};Test2=newString[]{"A","B"};}publicListTest1{get;set;}publicstring[]Test2{get;set;}}publicstaticvoidMain(){XmlSerializerxml