在另一个 class 中返回一个 IList<GenericClass> 属性

Returning an IList<GenericClass> property in another class

我有一个 ErrorMessage class 和 ResultMessage class 需要通用。 ErrorMessage 是:

public class ErrorMessage
{
    public int httpStatus { get; set; } 
    public string Header { get; set; } = "Error";
    public string Message { get; set; }
}

ResultMessageErrorMessage 相同,除了它还必须 return 一个 IList 结果,这意味着例如如果我成功插入了一个用户,输出应该是

{
 "httpStatus": 200,
 "Header" : "Success",
 "Message" : "User added Successfully",
 "Result" : {
 "userName": "dfdaadf",
 "password": "faeferafreaf"
}
}

我的ResultMessage是:

public class ResultMessage : ErrorMessage
{
    public ResultMessage()
    {
        httpStatus = 200;
        Header = "Success";
    }
    public virtual IList<T> Result { get; set; }
}

其中 T 应定义为通用 class,例如:

var msg = new ResultMessage();
var user = new User();
var list = new IList<User>();
list.Add(user);
msg.Result = list;

当然 public virtual IList<T> Result { get; set; } 是语法错误。

我怎样才能实现我的目标?

您的 ResultMessage 也必须是通用的:

public class ResultMessage<T> : ErrorMessage

调用时必须是这样的:

var msg = new ResultMessage<User>();
var user = new User();
var list = new List<User>();
list.Add(user);
msg.Result = list;

另一个提示:

列表属性不应该是可设置的。要么为此 属性 使用只读接口,如 IReadOnlyList<T>,要么使 属性 本身为只读,并在构造时对其进行初始化:

public class ResultMessage<T> : ErrorMessage
{
    public IReadOnlyList<T> Result { get; set; }

    public IList<T> Result { get; } = new List<T>();
}

List 实现 IList 接口,您可以将 ResultMessage 作为通用 class,示例:

  public class ResultMessage<T> : ErrorMessage
    {
        public ResultMessage()
        {
            httpStatus = 200;
            Header = "Success";
            Result = new List<T>();
        }
        public virtual IList<T> Result { get; set; }
    }



var msg = new ResultMessage<User>();
            var user = new User();
            msg.Result.Add(user);