簡體   English   中英

構造函數 C# 返回匿名列表

[英]Constructor C# to return anonymous list

我有在傳遞匿名列表后需要匿名返回的列表,這里是代碼。

public GenericResponseModel(bool success, string reason, List<dynamic> model)
    {
        Success = success;
        Reason = reason;
        model = model;
    }

我如何返回匿名列表,因為之后我會有匿名模型。

public ResponseWrapper<GenericResponseModel> GetVehicleChecklist()
    {
        List<VehicleChecklist> VehicleCheckList = this.database.VehicleChecklists.Select(y => y).ToList();
        if(VehicleCheckList != null)
        {
            IEnumerable<VehicleChecklistModel> mappedVehicleList = VehicleCheckList.MapVehicleCheckList();
            return new GenericResponseModel(true, string.Empty, mappedVehicleList);
        }}

我正在嘗試從該代碼中獲取匿名列表。

聽起來您正在嘗試使用泛型<T>來處理匿名類型的列表; 但是,構造函數不能是通用的,並且Model屬性需要反映T 為此,您需要使類型通用,並通過工廠方法代理它以使其可以使用(因為如果您不能說出名稱,您就無法創建new ); 例子:

using System.Collections.Generic;
using System.Linq;

static class P
{
    static void Main()
    {
        var list = new[]
        {
            new { Id = 1, Name = "abc"},
            new { Id = 2, Name = "def"},
            new { Id = 3, Name = "ghi"},
        }.ToList();
        var response = GenericResponseModel.Create(true, "because", list);
    }
}
static class GenericResponseModel
{    // factory API to make it callable with an anonymous type
     public static GenericResponseModel<T> Create<T>(bool success, string reason,
        List<T> model) => new GenericResponseModel<T>(success, reason, model);
}
class GenericResponseModel<T>
{
    public GenericResponseModel(bool success, string reason, List<T> model)
    {
        Success = success;
        Reason = reason;
        Model = model;
    }

    public bool Success { get; }
    public string Reason { get; }
    public List<T> Model { get; }
}

您還可以將公共屬性下推:

abstract class GenericResponseModel
{
    public bool Success { get; protected set; }
    public string Reason { get; protected set; }
    public static GenericResponseModel<T> Create<T>(bool success, string reason,
        List<T> model) => new GenericResponseModel<T>(success, reason, model);
}
class GenericResponseModel<T> : GenericResponseModel
{
    public GenericResponseModel(bool success, string reason, List<T> model)
    {
        Success = success;
        Reason = reason;
        Model = model;
    }
    public List<T> Model { get; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM