当你有如下代码时:staticTGenericConstruct()whereT:new(){returnnewT();}C#编译器坚持发出对Activator.CreateInstance的调用,这比native构造函数慢得多。我有以下解决方法:publicstaticclassParameterlessConstructorwhereT:new(){publicstaticTCreate(){return_func();}privatestaticFuncCreateFunc(){returnExpression.Lambda>(Expression.New(typeof(T)))
我有一个类似于工厂的对象的方法。你给它一个类型,它创建一个实例并做一些其他的事情。一种优雅的方式(在我看来)是这样的:publicTMagicMethod()whereT:SomeBaseClass{//Magicgoeshere}但这让FxCop感到不安,他说这是一种糟糕的风格-我收到“CA1004:通用方法应提供类型参数”警告。关于不使用推理之类的东西。所以,我能想到的唯一其他方法是这样的:publicSomeBaseClassMagicMethod(TypeT){//Samemagicgoeshere}我相信这在很多帐户上都不如第一种方法,但样式规则......关于警告的MSDN
鉴于以下publicclassService:IService{Repository_repository=newRepository();publicTGet(intid){return_repository.Get(id);}}publicinterfaceIService{TGet(intid);}我收到以下警告Typeparameter'T'hasthesamenameasthetypeparameterfromoutertype'Services.IService'我不确定这有什么问题,为什么它关心我的返回类型是否与我告诉类的类型相同。我在这里遗漏了什么吗?
我有两个类(class)。第一个是Person,第二个是Student(继承自Person)。我想过滤一个通用的List并找到所有成绩高于7的Students。我提出了以下解决方案:classPerson{publicstringName{get;set;}}classStudent:Person{publicdecimalGrade{get;set;}}classProgram{staticvoidMain(string[]args){Listpeople=newList();people.Add(newPerson(){Name="John"});people.Add(newStu
我有以下(简化的)方法:privatestaticstringGetStringFromValue(Tval){if(typeof(T)==typeof(DateTime)){returnstring.Format("{0}",((DateTime)val).Year.ToString("0000"));}returnstring.Empty;}在强制转换“(DateTime)val”时出现以下错误:CannotcastexpressionofType'T'totype'DateTime'如何访问DateTime参数的Year属性?更新:感谢您所有快速的答复。这个方法(和方法名称)真的
如何在wcf服务中使用泛型方法?我写了这段代码:[OperationContract]voidAddItem(Titem);但我收到以下错误:Type'T'cannotbeexportedasaschematypebecauseitisanopengenerictype.Youcanonlyexportagenerictypeifallitsgenericparametertypesareactualtypes. 最佳答案 你根本做不到。这是不可能的,因为soap不支持这个。看这个article,其中提到如何绕过泛型,方法是创建一个
这个问题在这里已经有了答案:Convertingastringtoaclassname(2个答案)关闭9年前。我有一个像这样的通用类:publicclassRepository{...}我需要用一个字符串来实例化它...示例:string_sample="TypeRepository";var_rep=newRepository();我该怎么做?这可能吗?谢谢!
有没有一种不编写递归方法的简单方法,该方法将为Type类中的泛型类型提供“用户友好”的名称?例如对于下面的代码,我想要类似'List>'的东西,而不是下面代码给出的速记或全名:varlist=newList>();vartype=list.GetType();Console.WriteLine(type.Name);Console.WriteLine(type.FullName); 最佳答案 根据您编辑的问题,您需要这样的内容:publicstaticstringGetFriendlyName(thisTypetype){if(ty
好吧,我是一个开始使用C#的Java人,我正在编写代码并开始制作一个泛型方法,我编写的内容可以运行和编译,但它违背了我所知道的关于泛型应该如何工作的一切,所以我希望有人可以向我解释一下:所以我有一个泛型方法定义如下:publicstaticListCopyAsList(IEnumerablelist,ObjectlockObject){if(list!=null){lock(lockObject){returnnewList(list);}}returnnull;}但对我来说奇怪的是,我可以在不指定T的情况下调用这个通用方法,它会起作用:Liststrings=newList(){"a
在这个问题中,当提到编译器时,我实际上指的是Roslyn编译器。使用IntelliSense时会出现问题,这被认为是相同的编译器。出于演示目的和完整性,使用了以下类(使用带有C#6.0和.NET4.6.1的VisualStudio2015):publicclassA{publicIEnumerableB{get;set;}}publicclassB{publicIEnumerableC{get;set;}}publicclassC{}publicclassHelper{}看下面的扩展方法:publicstaticvoidFooBar(thisHelper>helper,Expressi