当前位置:  开发笔记 > 编程语言 > 正文

C#泛型:我可以约束一组没有实现接口的类吗?

如何解决《C#泛型:我可以约束一组没有实现接口的类吗?》经验,为你挑选了1个好方法。

我有3个基本相同但没有实现接口的类,因为它们都来自不同的Web服务.

例如

Service1.Object1

Service2.Object1

Service3.Object1

它们都具有相同的属性,我正在编写一些代码,使用实现我自己的接口IObject1的中间对象将它们相互映射.

我用泛型做过这个

public static T[] CreateObject1(IObject1[] properties)
  where T : class, new()
{
   //Check the type is allowed
   CheckObject1Types("CreateObject1(IObject1[])", typeof(T));
   return CreateObjectArray(properties);
}

private static void CheckObject1Types(string method, Type type)
{
  if (type == typeof(Service1.Object1)
  || type == typeof(Service2.Object1)
  || type == typeof(Service3.Object1)
  || type == typeof(Service1.Object1[])
  || type == typeof(Service2.Object1[])
  || type == typeof(Service3.Object1[]))
  {
     return;
  }

  throw new ArgumentException("Incorrect type passed to ServiceObjectFactory::" + method + ". Type:" + type.ToString());
}

我的客户端代码如下:

//properties is an array of my intermediary objects
Object1[] props = ServiceObjectFactory.CreateObject1(properties);

我想要做的是摆脱CheckObject1Types方法并使用约束,以便在类型无效时我得到构建错误,因为目前我可以使用任何类型调用此方法,并且抛出ArgumentException CheckObject1Types方法.

所以我想做一些像:

public static T[] CreateObject1(IObject1[] properties)
  where T : class, new(), Service1.Object1|Service2.Object1|Service3.Object1
{
   return CreateObjectArray(properties);
}

有任何想法吗?

编辑:我不想更改每个Web服务的Reference.cs文件,因为只需要一个队友来更新Web引用和BAM!破碎的代码.



1> Jon Skeet..:

假设生成的类是部分的,您可以创建一个接口,然后添加另一个部分源文件,以使生成的类实现该接口.然后您可以正常约束接口.无需更改实际生成的代码:)

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有