簡體   English   中英

錯誤索引超出范圍。 必須是非負數且小於集合的大小

[英]Error Index was out of range. Must be non-negative and less than the size of the collection

我想用for填充我的DTO對象,但是我收到了這個錯誤:

Index was out of range. Must be non-negative and less than the size of the collection

這是我的代碼:

 public static List <BankDepositHistoryDTO> DtoTODomain()
        {
            MyketAdsEntities context = new MyketAdsEntities();
            List<BankDepositHistoryDTO> bdto = new List<BankDepositHistoryDTO>();


            //var transactionlist


            var transactionlist = GetListoftransactions.GetAccountingListoftransactions();
            for (int i = 0; i < transactionlist.Count; i++)
            {
                bdto[i].AccountId = transactionlist[i].AccountId;
                bdto[i].Id = transactionlist[i].Id;
                bdto[i].Amount = transactionlist[i].Amount;
                bdto[i].AdditionalData = transactionlist[i].AdditionalData;
                bdto[i].ClientIp = transactionlist[i].ClientIp;
                bdto[i].Gateway = transactionlist[i].Gateway;
                bdto[i].PaymentRefNumber = transactionlist[i].PaymentRefNumber;
                bdto[i].ReturnUrl = transactionlist[i].ReturnUrl;
                bdto[i].State = transactionlist[i].State;
                bdto[i].Uuid = transactionlist[i].Uuid;



            }
            return bdto;

        }

我在這里收到了這條消息

bdto[i].AccountId = transactionlist[i].AccountId;

您已創建一個空列表,但未向其添加元素。 您必須先添加一個元素,然后更新其屬性:

for (int i = 0; i < transactionlist.Count; i++)
{
    BankDepositHistoryDTO b = new BankDepositHistoryDTO();
    b.AccountId = transactionlist[i].AccountId;
    b.Id = transactionlist[i].Id;b
    b.Amount = transactionlist[i].Amount;
    b.AdditionalData = transactionlist[i].AdditionalData;
    b.ClientIp = transactionlist[i].ClientIp;
    b.Gateway = transactionlist[i].Gateway;
    b.PaymentRefNumber = transactionlist[i].PaymentRefNumber;
    b.ReturnUrl = transactionlist[i].ReturnUrl;
    b.State = transactionlist[i].State;
    b.Uuid = transactionlist[i].Uuid;
    bdto.Add(b);
}

好吧, bdto長度小於transactionlist長度。

在for循環之前,您可以調整bdto大小以匹配transactionlist

我完全同意@Ashkan和@Mureinik的回答,但只是為了改進代碼,你可以使用AutoMapper 它將減少每個元素的循環和迭代。 似乎這兩個對象之間的所有屬性都是相同的。

Mapper.CreateMap<Transaction,BankDepositHistoryDTO>(); 
BankDepositHistoryDTO obj = Mapper.Map<Transaction,BankDepositHistoryDTO>(TransactionObj);

另外如果GetListoftransactions.GetAccountingListoftransactions(); 返回List<BankDepositHistoryDTO> ,可以直接在方法中返回該對象。

暫無
暫無

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

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