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的唯一希望-除非强制转换实体属性,否则无法解析实体属性。我正在实现你所描述的。