Tag: generics

为通用参数指定构造函数约束

我有一组对象,我作为参数传递给另一种类型的对象(一对一)。 我在很多地方这样做(基本上是从数据对象转换为业务对象)。 我想写一个通用的扩展方法来完成这个。 但是我被卡住了,因为我不知道如何指定业务对象具有将数据对象作为参数的构造函数的约束。 以下是我的function代码: public static IList ConvertTo(this IEnumerable list) where T : new(A)/*THIS IS PROBLEM PART*/ { var ret = new List(); foreach (var item in list) { ret.Add(new T(item)); } return ret; }

在重写inheritance方法时避免使用显式类型转换

我有一个基本抽象类,也实现了一个特定的接口。 public interface IMovable where TEntity: class where T: struct { TEntity Move(IMover moverProvider); } public abstract class Animal : IMovable { … public virtual Animal Move(IMover moverProvider) { // performs movement using provided mover } } 然后我inheritance了一些类,其中一些必须覆盖基类的接口实现方法。 public class Snake : Animal { … public override Animal Move(IMover moverProvider) { // perform different movement […]

为什么带有“where T:class”约束的Generic 方法接受接口

我有这个interface : public interface ITestInterface { int TestInt { get; set; } } 和这个generics方法(带有T : class约束): public void Test() where T : class { // DoSomething } 这个电话: Test(); 当interface 不是一个class (或者它是什么?)时,一切都编译并运行。 为什么会这样? 我第一次在我的WCF代理类上看到这个: public partial class TestServiceClient: System.ServiceModel.ClientBase, TestNamespace.ITestService ClientBase具有此定义: public abstract class ClientBase : ICommunicationObject, IDisposable where TChannel : class

具有“具有属性X”约束的generics函数?

我有一个第三方闭源应用程序,它导出一个COM接口,我通过Interop在我的C#.NET应用程序中使用它。 此COM接口导出许多对象,这些对象都显示为System.Object,直到我将它们转换为适当的接口类型。 我想分配所有这些对象的属性。 从而: foreach (object x in BigComInterface.Chickens) { (x as Chicken).attribute = value; } foreach (object x in BigComInterface.Ducks) { (x as Duck).attribute = value; } 但是分配属性很可能(由于特定于应用程序的原因,不可避免)抛出我想要恢复的exception,所以我真的想要一个try / catch。 从而: foreach (object x in BigComInterface.Chickens) { try { (x as Chicken).attribute = value; } catch (Exception ex) { // handle… } } foreach […]

使用带有新Func 的void返回类型

我在我的代码中使用匿名委托调用此示例函数: public static int TestFunction(int a, int b) { return a + b; } 代表看起来像这样: var del = new Func(TestFunction); 我的问题是:你如何为TResult指定一个void返回类型? 以下不起作用: public static void OtherFunction(int a, string b) { … } var del = new Func(OtherFunction);

如何指定.NET Generics约束中不允许的类型?

是否可以在不允许某些类型的generics类上指定约束? 我不知道是否可能,如果是,我不确定语法是什么。 就像是: public class Blah where : !string { } 我似乎无法找到任何允许这种约束的符号。

类型参数“T”与外部类型“…”中的类型参数同名

public abstract class EntityBase { … } public interface IFoobar { void Foo(int x) where T : EntityBase, new(); } public interface IFoobar where T : EntityBase, new() { void Foo(int x); } public class Foobar : IFoobar, IFoobar where T : EntityBase, new() { public void Foo(int x) { … } void IFoobar.Foo(int x) […]

C#使用reflection获取通用参数名称

说我有一个像这样的C#类: class MyClass{} 如何从给定的Type实例中获取”Tkey”和”Tvalue” ? 我需要参数名称,而不是Type。 编辑我的类是未知的类型,所以它可能是类似的 class MyClass2{} 同样

如何通过reflection访问Generic.List索引?

好吧,我有一个类,我传递一个对象作为属性。 我传递的对象是List 在我的class级我试图通过reflection访问对象索引,但我不能! 例: 这节课的作品我刚刚写下了我想给你看的部分,我需要帮助。 class MyClass { private object _recordSet; public object RecordSet { get { return _recordSet; } set { _recordSet = value; } } public string Draw() { system.reflection.Assembly asem = system.reflection.Assembly.getAssembly(_dataSource.GetType()); object instance; instance = asem.CreateInstance(_dataSource.GetType().UnderlyingSystemType.FullName); //to access de Count of my List int recordcount = int.Parse(_dataSource.GetType().GetProperty(“Count”).GetValue(_dataSource,null)); //i need to do […]

避免多种类似方法中的重复代码(C#)

大家问候! 我在C#中有一些非常类似的方法(可能会有几十个)。 它们都建立在几乎相同的模式上: ResultObjectType MethodX(…input parameters of various types…) { nesting preparation code here… { { resultObject = ExternalClass.GetResultForMethodX(input parameters of MethodX); } } nesting result processing code here … return resultObject; } 重复/相同的部分: ResultObjectType,准备代码,结果处理代码 。 不同部分: 调用ExternalClass方法,输入参数集(输入参数数量,类型)。 重要提示:我无法控制方法签名 – 无法更改它们。 我试图避免重复类似代码的所有块与这样的事情: ResultObjectType MethodX(…input parameters of various types…) { return UniversalMethod( new ExternalMethodDelegate(ExternalClass.GetResultForMethodX), input parameters […]