如何拥有不同数据类型的 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 来创建一个值对象
如果我需要将下面的代码转换为使用 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 来创建一个值对象