草庐IT

c# - 获取对动态对象中方法的泛型调用

我开始在.Net中使用动态对象,但我不知道该怎么做。我有一个继承自DynamicObject的类,我重写了TryInvokeMember方法。例如classMyCustomDynamicClass:DynamicObject{publicoverrideboolTryInvokeMember(InvokeMemberBinderbinder,object[]args,outobjectresult){//Iwanttoknowherethetypeofthegenericargument}}在该方法中,我想知道调用中通用参数的类型(如果有的话)。例如如果我调用以下代码,我想在我的动态对

c# - 具有泛型参数和抽象类的泛型

我有两个通用基类。第二个泛型类对第一个类的参数有约束。abstractclassFirstClass{...}abstractclassSecondClasswhereU:FirstClass{...}这不起作用,因为未定义FirstClass。所以我需要这样做。abstractclassFirstClass{...}abstractclassSecondClasswhereU:FirstClass{...}哪个有效。然而,这使得实现这些抽象类变得很丑陋。classSomeClass{...}classMyFirstClass:FirstClass{...}classMySecondC

C# 泛型接口(interface)特化

我想知道是否有可能以某种方式在C#中专门化通用接口(interface)方法?我发现了类似的问题,但没有完全像这样的问题。现在我怀疑答案是“不,你不能”,但我想确认一下。我有类似下面的内容。publicinterfaceIStorage{voidStore(Tdata);}publicclassStorage:IStorage{publicvoidStore(Tdata){Console.WriteLine("Generic");}publicvoidStore(intdata){Console.WriteLine("Specific");}}classProgram{staticvo

c# - 重载泛型方法

当调用用于存储对象的通用方法时,有时需要以不同方式处理特定类型。我知道您不能基于约束进行重载,但任何其他替代方案似乎都会出现其自身的问题。publicboolSave(Tentity)whereT:class{...somestoragelogic...}我想做的是类似下面的事情:publicboolSave(Tentity){...speciallogic...}过去,我们的团队创建了“一次性”方法来保存这些类,如下所示:publicboolSaveSpecificClass(SpecificClasssc){...speciallogic...}但是,如果您不知道该功能的存在,并且

c# - 如何为具有类型参数约束的泛型类型编写扩展方法?

我正在使用一个任务特定的.NET平台,它是预编译的,而不是开源的。对于某些任务,我需要扩展此类,而不是继承它。我只是想添加一个方法。首先我想向您展示一个dummycode现有类:publicclassMatrixwhereT:new(){...publicTvalues[,];...}我想通过以下方式扩展这个类:publicstaticclassMatrixExtension{publicstaticTgetCalcResult(thisMatrixmat){Tresult=0;...returnresult;}}我从许多谷歌链接中得到了这个语法,所以不知道它是否正确。编译器告诉我没有

c# - 泛型,其中 T 是实现接口(interface)的类

我有一个界面:interfaceIProfile{...}...和一个类:[Serializable]classProfile:IProfile{privateProfile(){...}//privatetoensureonlyxmlserializercreatesinstances}...和一个有方法的经理:classProfileManager{publicTLoad(stringprofileName)whereT:class,IProfile{using(varstream=new.......){varser=newXmlSerializer(typeof(T));ret

c# - 泛型 Func<T> 的运行时创建

我需要实现方法:objectGetFactory(Typetype);此方法需要返回一个Func,其中类型参数“T”是“类型”。所以,我的问题是我不知道如何在运行时使用反射创建Func。Activator.CreateInstance不起作用,因为委托(delegate)上没有构造函数。有什么想法吗? 最佳答案 您使用Delegate.CreateDelegate,即来自MethodInfo;下面,我进行了硬编码,但您可以使用一些逻辑或Expression来获取实际的创建方法:usingSystem;usingSystem.Refl

c# - 将泛型限制为可空类型

我正在寻找这样的示例用法:FoostringFoo=newFoo("Theansweris");FoointFoo=newFoo(42);//TheValueofintFoo&stringFooarestronglytypedstringFoo.Nullify();intFoo.Nullify();if(stringFoo==null&&intFoo==null)MessageBox.Show("Botharenull);给定这个类Foo,我可以将T自动包装成一个可为null的对象:publicclassFoo1whereT:struct{privateT?_value;publicF

c# - 具有泛型类型的 nameof

我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型://Thisdoesnotcompilenameof(IGenericInterface.Method)//Thiswouldcompiletypeof(IGenericInterface)我认为这应该是有效的c#-6.0或者我是否遗漏了什么或者是否有更好的方法来做到这一点。我不想使用字符串作为方法名称,因为如果方法被重命名代码会中断而不会出现任何构建时错误。 最佳答案 这是预料之中的。根据documentation,您的表达式是

c# - 泛型与数组列表

我在这里工作的系统是在.net2.0之前编写的,没有泛型的好处。最终更新为2.0,但由于时间紧迫,没有重构任何代码。代码在许多地方使用ArraysLists等将事物存储为对象。从性能的角度来看,将代码更改为使用泛型有多重要?我知道从性能角度来看,装箱和拆箱等,效率低下,但改变它真的能带来多少性能提升?泛型是可以在前进的基础上使用的东西,还是它有足够的性能变化,应该做出良心的努力来更新旧代码? 最佳答案 正如您所说,从技术上讲,泛型的性能更好。但是,除非性能非常重要并且您已经在其他方面进行了优化,否则您可能会通过将时间花在其他方面来获