gpt4 book ai didi

c# - 在应用程序状态中存储通用列表

转载 作者:行者123 更新时间:2023-12-04 07:03:20 24 4
gpt4 key购买 nike

我正在使用 C# 和 ASP.NET 3.5。

我在 HttpContext.Current.Application 中存储了一个通用列表,以便网站的所有页面都可以访问它。当我将它的值赋给本地页面上的一个本地变量以供本地使用时,我对本地变量所做的任何更改都会反射(reflect)在应用程序状态的原始列表中。当我在本地分配它时,就好像直接引用了 Application 状态变量。

下面是一些示例代码,它实例化一个局部通用列表变量,向变量添加 3 个字符串,将变量添加到应用程序状态,从局部变量中删除一项,并在此过程中打印出计数。结果是从局部变量中移除的一项也从应用程序状态中的对应列表中移除。

    -- generic list in Application state
Response.Write("<BR><BR><b>list (generic) example in Application</b><BR><BR>");
List<string> productList = new List<string>();
productList.Add("1");
productList.Add("2");
productList.Add("3");
HttpContext.Current.Application["productList"] = productList;
Response.Write("product segments: " + productList.Count + "<BR>");
Response.Write("product segments in application cache: " + ((List<string>)HttpContext.Current.Application["productList"]).Count + "<BR>");

productList.Remove("1");

Response.Write("product segments: " + productList.Count + "<BR>");
Response.Write("product segments in application cache: " + ((List<string>)HttpContext.Current.Application["productList"]).Count + "<BR>");

随意在 aspx 文件中运行此代码并亲自查看结果。

问题:如何将泛型存储在应用程序状态中,以便将它们分配给局部变量,并且对该局部变量的更改不应传播回应用程序状态变量?

顺便说一下,这也在 Session 状态中发生。在 Application 或 Session 中存储泛型我缺少什么?

谢谢你的帮助。

最佳答案

您的问题是 List 是一种引用类型,因此当您将 productList 分配给 Context 时……您实际上只是添加了对原始列表的引用。这就是为什么两个位置都会出现变化的原因。

您需要克隆列表,而不仅仅是将现有列表分配给上下文。根据您是否需要浅拷贝与深拷贝,您可以使用以下代码:

HttpContext.Current.Application["productList"] = 
new List<string>(productList);

或者
HttpContext.Current.Application["productList"] = 
new List<string>(productList.Select(item => item.Clone()).ToList());

关于c# - 在应用程序状态中存储通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com