【问题标题】:ASP MVC5 public readonly variable changes value when it should notASP MVC5 公共只读变量不应该更改值
【发布时间】:2017-10-20 06:17:38
【问题描述】:

对于我的应用程序(用于为客户管理一些数据),我有一个public static class Util,我在其中存储了在各个地方使用的数据。在这个类中,我有以下变量:

public static readonly List<string> PUBLICSALESMANAGERS = new List<string> { "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" };

这是一个在所有情况下都相同的人员列表。然后,根据您要管理的客户,需要将该客户的销售经理添加到列表中。

在我的一个控制器中,我在一些操作中有以下代码行:

List<string> salesManagers = Util.PUBLICSALESMANAGERS;
salesManagers.Insert(0, customer.SalesManager);
ViewBag.salesManagers = salesManagers;

由于某种原因,每次运行此代码时,插入似乎都在更新Util.PUBLICSALESMANAGERS 变量。因此,每个请求的列表都会越来越长,这不应该是这种情况。

有没有人可以帮助我解决这个问题? 提前致谢!

编辑

为避免尝试和避免混淆,请举例说明它应该如何工作:

当我加载具有销售经理“sssss”的客户 x 时。我的列表现在应该如下所示:"sssss", "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee"

当我加载客户 y 时,它有销售经理“mmmmm”,我希望我的列表看起来像:"mmmmm", "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee"

等等……

【问题讨论】:

    标签: c# asp.net asp.net-mvc-5 controller action


    【解决方案1】:

    List(T).Insert(Int32,T) 在第一个参数指定的位置插入一个项目。它不会覆盖。你想要的是像

      if (!salesManagers.Contains(customer.SalesManager))
        salesManagers.Insert(0, customer.SalesManager);
    

    更新:澄清问题后,方法是创建Util.PUBLICSALESMANAGERS 列表的副本并对其进行修改。

    new List(Util.PUBLICSALESMANAGERS)

    【讨论】:

    • 我知道插入不会覆盖。这不是我想要做的。我要做的是重用原始列表并为该客户添加销售经理,仅用于当前操作。
    • 好的,我明白了。通过new List(Util.PUBLICSALESMANAGERS)创建副本怎么样?
    • 这有帮助!我应该能够想到...非常感谢!
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多