如何拥有不同数据类型的 getter 和 setter

How to have getter and setter of different data type

如果我需要将下面的代码转换为使用 ResponseStatus 输入进行设置,并给出 getter 和一个 属性 中的字符串,如下所示 public string ResponseStatus {get;设置;}

    private string _responseStatus;

    public string GetResponseStatus()
    {
        return _responseStatus.ToString();
    }

    public void SetResponseStatus(ResponseStatus responseStatus)
    {
        _responseStatus = responseStatus.ToString();
    }

如上需要更新以下内容,

public string ResponseStatus { 
        get { 
            return _responseStatus; 
        } 
        set { **// Need to check for the "ReponseStatus" type before setting this**
           _responseStatus = value.ToString(); } 
    }

但我需要确保值 ResponseStatus 仅设置为“ResponseStatus”类型的值

public enum ResponseStatus
{
    Failed = 0,
    Success = 1,
    PartialSuccess = 2
}

简单地说,您不能拥有具有两种不同类型的 属性,但您可以使用 value object 概念来实现您在这里的需要。

例如,我假设您想要一个这样的 DTO class

public class TestDto
{
    public string ResponseStatus { get; set; } 
}

public enum ResponseStatuses
{
    Failed = 0,
    Success = 1,
    PartialSuccess = 2
}

你的 setter 应该是枚举,你的 getter 应该是 return 字符串。 为此,您可以定义一个值对象类型。

// value object type example
public record ResponseStatus 
{
    private string _responseStatus;
    public ResponseStatus(ResponseStatuses responseStatus)
    {
        _responseStatus = responseStatus.ToString();    
    }
    public override string ToString()
    {
        return _responseStatus;
    }
    public static implicit operator ResponseStatus(ResponseStatuses value)
    {
        return new ResponseStatus(value);
    }
}

并在您的 DTO 中使用它

public class TestDto
{
    public ResponseStatus ResponseStatus {get; set;} // this always return string to the client
}

用法示例:

   var testResult = new TestDto();
   testResult.ResponseStatus = ResponseStatuses.Success;
   
   Console.WriteLine(testResult.ResponseStatus); // it is string "Success"

注意:在这个例子中,我使用了 record 来定义一个值对象,但是如果您没有使用最新的 c# 版本,则有 other ways 来创建一个值对象