C# 将泛型模板作为参数传递

C# 将泛型模板作为参数传递,c#,templates,generics,reusability,C#,Templates,Generics,Reusability,尝试实现下面的重用 if(update) var updateType = (A)request; updateType.Entity.NameFlag = nameValue; updateType.Entity.PhoneFlag = phoneValue else var addType = (B) request; addType.Entity.NameFlag = nameValue; addType.Entity.PhoneFlag = phone

尝试实现下面的重用

if(update)
   var updateType = (A)request;
   updateType.Entity.NameFlag = nameValue;
   updateType.Entity.PhoneFlag = phoneValue
else
   var addType = (B) request;
   addType.Entity.NameFlag = nameValue;
   addType.Entity.PhoneFlag = phoneValue
正如您所看到的,唯一的区别是对象(A或B)

如何使用T模板实现重用?

public void SomeMethod()其中A:BaseTypeA其中B:BaseTypeB
public void SomeMethod<A,B>()  where A : BaseTypeA where B : BaseTypeB
{
  if(update)
  {
      var updateType = (A)request;
      updateType.Entity.NameFlag = nameValue;
      updateType.Entity.PhoneFlag = phoneValue;
  }
  else
  {
      var addType = (B) request;
      addType.Entity.NameFlag = nameValue;
      addType.Entity.PhoneFlag = phoneValue;
  }
}
{ 如果(更新) { var updateType=(A)请求; updateType.Entity.NameFlag=nameValue; updateType.Entity.PhoneFlag=phoneValue; } 其他的 { var addType=(B)请求; addType.Entity.NameFlag=nameValue; addType.Entity.PhoneFlag=phoneValue; } }
请尝试上面的

公共作废文件(T项)
public void DoStuff<T>(T item)
   where T : BaseClasseOrInterfaceOfAandB
{       
   item.Entity.NameFlag = nameValue;
   item.Entity.PhoneFlag = phoneValue
}

if(update)
{
    DoStuff((A)request);
}
else
{
    DoStuff((B)request);
}
其中T:BaseClasseOuterFaceOfandB { item.Entity.NameFlag=名称值; item.Entity.PhoneFlag=phoneValue } 如果(更新) { DoStuff((A)请求); } 其他的 { DoStuff((B)请求); }
使用约束更新不确定这是否真的实现了代码重用。考虑到A和B不是从同一个基类继承的,这和泛型一样好。我同意。我可能还认为有限的代码重用并不能保证基类和泛型的额外复杂性。@TGH-您能更新代码以便addType.Entity.NameFlag=nameValue;addType.Entity.PhoneFlag=phoneValue;可以重复使用吗?不能这样做。。我需要转换项,以便它识别实体对象。两者都有不同的基本情况,并且我无法编辑/添加基本代码的接口,因为它是使用第三方工具生成的。您可能已经注意到,有人投票决定结束您的问题“太广泛”。那是我。这是根据您提供的非常有限的信息对答案的最佳猜测。你想重复使用什么?什么是“请求”?“代码生成”是什么以及如何生成的?请用实际的目标语言编写伪代码,或者至少描述一下该语言到底是什么。@如果它们不是从同一个基类继承的,泛型对您没有多大帮助。您可以进入反射孔,但这是“重用”@Aron的唯一希望-除非强制转换实体属性,否则无法解析实体属性。我正在实现你所描述的。