正在转换对象类型

本文关键字:类型 对象 转换 | 更新日期: 2025-03-16 13:45:42

我有一个基类:

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;

请原谅我的简单/相当愚蠢的例子,但我正在努力创造一个基本的例子。

正在转换对象类型

您可以为此使用泛型。我创建了一个小程序来演示:

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; }
}

为了演示的目的,它被简化了一点,但我想你已经明白了。

我不清楚你想在这里完成什么。如果没有泛型,您需要为类似的行为定义通用接口。

这是你想要的吗?

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
        };
    }
}