gpt4 book ai didi

c# - 使用具有两种相同但名称不同的类型的 API。我怎样才能重用我的代码?

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:34 24 4
gpt4 key购买 nike

我正在使用一个 Web 服务,它返回两种完全相同但被称为两种不同事物的类型(是的,我知道很棒的 AP​​I...)。一种类型称为 SearchKMQueryResponse,另一种类型称为 TopSolutionsKMQueryResponse。我将这些类型的输出映射到我自己的模型类中,并且必须使用两种采用不同参数类型但返回相同类型的方法。这两个 API 类型继承了 object 类型,所以我不能传入一个基类型作为参数。它们不通过 API 公开接口(interface),所以我也被搞砸了。

那么有没有一个优雅的解决方案来停止在下面的代码中重复我自己? ...

编辑:我为此解决方案使用 .Net v3.5。

      public static KmSearchResponse Map(SearchKMQueryResponse response)
{
if (response == null)
{
return null;
}
else
{
var myResponse = new KmSearchResponse()
{
CountTotal = long.Parse(response.model.instance.resultlist.resultlist[0].Value),
Message = response.message,
Status = (MyProject.Model.StatusType)response.status,
};

for (var startID = 2; startID < (myResponse.CountTotal * 5); startID += 5)
{
myResponse.Results.Add(
KmSearchResponseResultsMapper.Map(
response.model.instance.resultlist.resultlist, startID)
);
}

myResponse.Count = myResponse.Results.Count;

return myResponse;
}
}

public static KmSearchResponse Map(TopSolutionsKMQueryResponse response)
{
if (response == null)
{
return null;
}
else
{
var myResponse = new KmSearchResponse()
{
CountTotal = long.Parse(response.model.instance.resultlist.resultlist[0].Value),
Message = response.message,
Status = (MyProject.Model.StatusType)response.status,
};

for (var startID = 2; startID < (myResponse.CountTotal * 5); startID += 5)
{
myResponse.Results.Add(
KmSearchResponseResultsMapper.Map(
response.model.instance.resultlist.resultlist, startID)
);
}

myResponse.Count = myResponse.Results.Count;

return myResponse;
}
}

最佳答案

我假设 SearchKMQueryResponseTopSolutionsKMQueryResponse 是生成的 WCF 数据协定。这些是作为部分类生成的,因此您可以在应用接口(interface)的地方为它们编写另一个部分:

IQueryResponse
{
SomeModel model { get; set; }
SomeMessage message { get; set; }
SomeStatus status { get; set; }
}

public partial class SearchKMQueryResponse : IQueryResponse { }
public partial class TopSolutionsKMQueryResponse : IQueryResponse { }

现在您可以更改映射器以接受接口(interface)作为输入:

KmSearchResponse Map(IQueryResponse response)

关于c# - 使用具有两种相同但名称不同的类型的 API。我怎样才能重用我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com