我有一个基类:
public class BaseResponse
{
public int StatusCode { get; set; }
public string ErrorMessage { get; set; }
public int ErrorCode { get; set; }
}
然后我有从基类派生的类:
public class AddAccountResponse : BaseResponse
{
public string AcctNum { get; set; }
}
public class AddCustomerResponse : BaseResponse
{
public string FullName { get; set; }
}
发生错误时,我有一个返回BaseResponse的方法。
将响应从基础转换/转换为预期结果类型的最佳方法是什么?例如:
public AddCustomerResponse PleaseAddMyCustomer(CustomerRequest customerReq)
{
AddCustomerResponse response;
if (restResponse.StatusCode != HttpStatusCode.OK)
{
...
BaseResponse base = GetErrorResponse(restResponse);
return (response.GetType(response))base; <-----
}
}
我知道我可以:
response = new AddAccountResponse()
{
StatusCode = base.StatusCode
...
}
return response;
请原谅我的愚蠢/相当愚蠢的例子,但我想创建一个基本的例子。
答案 0 :(得分:0)
您可以使用泛型。我创建了一个小程序来演示:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string restResponse = "OK";
// Creates an AddAccountResponse
var response = GetResponse<AddAccountResponse>(restResponse);
response.AccountNumber = 0;
}
// I converted your `GetResponse` to a generic method `GetResponse<T>`.
// The method expects that `T` is (derived from) a `BaseResponse`
// and that `T` has a parameterless constructor.
private static T GetResponse<T>(string restResponse) where T : BaseResponse, new()
{
var response = new T();
response.StatusCode = restResponse;
return response;
}
}
public class BaseResponse
{
public string StatusCode { get; set; }
}
public class AddAccountResponse : BaseResponse
{
public int AccountNumber { get; set; }
}
为了演示目的,它有点简化,但我想你明白了。
答案 1 :(得分:0)
我不清楚你要在这里完成什么。如果没有泛型,则需要为类似的行为定义公共接口。
这是你想要的吗?
class Program
{
static void Main(string[] args)
{
List<IBaseEntity> entities=new List<IBaseEntity>();
IBaseEntity acct=new Account() { AcctNum="1001-Q" };
entities.Add(acct);
IBaseEntity cust=new Customer() { FullName="Draco Malfoy" };
entities.Add(cust);
List<BaseResponse> responces=new List<BaseResponse>();
responces.Add(cust.GetResponce());
responces.Add(acct.GetResponce());
foreach (var item in responces.OfType<AddCustomerResponse>())
{
Console.WriteLine(item.FullName);
}
foreach (var item in responces.OfType<AddAccountResponse>())
{
Console.WriteLine(item.AcctNum);
}
}
}
具有以下定义:
public class BaseResponse
{
public int StatusCode { get; set; }
public string ErrorMessage { get; set; }
public int ErrorCode { get; set; }
}
public class AddAccountResponse : BaseResponse
{
public string AcctNum { get; set; }
}
public class AddCustomerResponse : BaseResponse
{
public string FullName { get; set; }
}
public interface IBaseEntity
{
BaseResponse GetResponce();
}
public class Customer : IBaseEntity
{
public string FullName { get; set; }
public AddCustomerResponse GetResponce()
{
return new AddCustomerResponse()
{
FullName=this.FullName
};
}
}
public class Account : IBaseEntity
{
public string AcctNum { get; set; }
public AddAccountResponse GetResponce()
{
return new AddAccountResponse()
{
AcctNum=this.AcctNum
};
}
}