dotNet Core 5 API 服务将对象添加到列表但结果具有最后一项的多个副本

dotNet Core 5 API Service adds objects to list but result has multiple copies of the last item

dotNet Core 5 C# Web API 项目,服务 class 将对象(基于视图模型)添加到列表中。调试显示所有数据都是正确的,因为对象被构建并添加到列表中,但返回的结果有多个(匹配它应该具有的计数)仅添加的最后一项的副本。下面的服务代码和视图模型代码。我错过了什么?

using FS.Data.Repositories;
using FS.Models;
using FS.ViewModels;
using FS.ViewModels.APVendor;
using Microsoft.Extensions.Options;
using NLog;
using System.Collections;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;

namespace FS.Services
{
    public class GLAccountSetService : IGLAccountSetService
    {
        private static Logger _logger = LogManager.GetCurrentClassLogger();
        private readonly IOptions<AppSettingsModel> AppSettings;
        private readonly HttpClient Client;

        GlAccountSetResponseViewModel result = new GlAccountSetResponseViewModel();
        public GLAccountSetService(HttpClient client, IOptions<AppSettingsModel> app)
        {
            Client = client; //?? throw new ArgumentNullException(nameof(client));
            AppSettings = app;
        }
        public async Task<GlAccountSetResponseViewModel> GetGLAccountSets(IList<GlAccountSetRequestViewModel> req, IAPCorpRepository apcr)
        {
            result.GlAccountSetViewModels = new List<GlAccountSetViewModel>();
            result.SuccessErrorWarningResult = new SuccessErrorWarningResult();
            GlAccountSetViewModel accountSet = new GlAccountSetViewModel();
            
            string payorID = "";
            string payeeID = "";
            string payorCashAccount = "";
            string payeeCashAccount = "";
            string expenseAccount = "";
            string offsetAccount = "";
            string type = "";            
            long reqID = 0;

            foreach (GlAccountSetRequestViewModel glr in req)
            {
                type = glr.Type;
                expenseMain = glr.ExpenseAccount;
                payorID = glr.PayorCorpID;
                payeeID = glr.PayeeCorpID;
                reqID = glr.ReqID;

                //...skipping calculation code that works
                
                accountSet.ExpenseAccount = expenseAccount;
                accountSet.PayorCashAccount = payorCashAccount;
                accountSet.PayeeCashAccount = payeeCashAccount;
                accountSet.OffsetAccount = offsetAccount;
                accountSet.ReqID = reqID;
                result.GlAccountSetViewModels.Add(accountSet);                                
            }
            return result;
        }                
    }
}

using FS.Common;
using System.Collections.Generic;

namespace FS.ViewModels.APVendor
{
    public class GlAccountSetResponseViewModel : FSObject<GlAccountSetResponseViewModel>
    {
        public IList<GlAccountSetViewModel> GlAccountSetViewModels { get; set; }
        public SuccessErrorWarningResult SuccessErrorWarningResult { get; set; }
    }
}
namespace FS.ViewModels.APVendor
{
    public class GlAccountSetViewModel
    {
        public string ExpenseAccount { get; set; }
        public string PayorCashAccount { get; set; }
        public string PayeeCashAccount { get; set; }
        public string OffsetAccount { get; set; }
        public long ReqID { get; set; }
    }
}

您多次将相同的 accountSet 实例添加到列表中,仅在循环中对其进行修改。因此,列表中对它的所有引用都将“具有”最近设置的值。

您需要在循环中创建一个新的 GlAccountSetViewModel 实例并添加该实例,或者将其设为 struct 以在添加时复制它。