Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态ArrayList在内存中存储值?_C#_Asp.net - Fatal编程技术网

C# 静态ArrayList在内存中存储值?

C# 静态ArrayList在内存中存储值?,c#,asp.net,C#,Asp.net,我是c#的新手,我正在努力学习更多……现在,我很难理解静态ArrayList 在php中,我可以定义: Class Singleton{ private static $instance; private static $arrayDemo = array(); private function __construct(){} public static function getInstance(){ if(!isset(self::$inst

我是c#的新手,我正在努力学习更多……现在,我很难理解静态ArrayList

在php中,我可以定义:

Class Singleton{
    private static $instance;
    private static $arrayDemo = array();

    private function __construct(){}

    public static function getInstance(){
        if(!isset(self::$instance))
            self::$instance = new Singleton();
        return self::$instance;
    }
    public static addItem($item){
       self::$arrayDemo[] = $item;
    }

    public static getItems(){
       return self::$arrayDemo[];
    }
}
Singleton::getInstance();

Singleton::addItem("first");
Singleton::addItem("second");
Singleton::getItems(); // returns {0=>first,1=>second}
如果我重新加载一个页面,我会得到相同的结果(0=>first,1=>second)

我试图在c#中实现单例模式以获得相同的结果,但我得到了重复的值:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
    private static ArrayList ArrayDemo = new ArrayList();

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }


    public static void AddItem(string item)
    {
        ArrayDemo.Add(item);
    }

    public static ArrayList GetItems()
    {
        return ArrayDemo;
    }
}

//in cshtml:
Singleton.AddItem("first");
Singleton.AddItem("second");
Singleton.GetItems();
若我刷新一次网站,我会得到和php相同的结果。。。但是,如果我将其刷新3次,则返回..:

0=>first,1=>second,2=>first,3=>second,4=>first,5=>second
为什么会发生这种情况?如果我使用静态方法,我可以在刷新时清除ArrayList结果吗? 我只是想了解其中的逻辑

谢谢你们

为什么会发生这种情况

这是一个静态变量。它的生存期与AppDomain的生存期一样长,它是生命的一部分,几乎总是比单个请求的生存期长很多,这似乎是您假设的生存期。在ASP.NET中,相同的
AppDomain
服务于许多请求-您不会为每个请求获得单独的进程

我建议:

  • 首先,避免使用单例模式;这很少是个好主意
  • 您避免使用静态变量,而不是用于有效恒定的数据(甚至可能是…)
  • 您避免使用非泛型集合,如
    ArrayList
    ,而更倾向于使用泛型集合,如
    List

此外,如果您是C#新手,我建议您先放弃web部件——web和富客户端GUI框架都有自己的怪癖需要了解;如果你想尝试使用这种语言和基本的核心库(例如,集合和IO),我发现使用控制台应用程序来实现这一目的会更有效率。

这就是问题所在:php不知道真正的静态实例:)请看和@AndreasniederMir当我从C#中学到更多知识时,我觉得我在php世界失去了5年:(我会听从你的建议。.随着我的继续,我觉得我错过了更多需要理解和学习的东西。顺便说一句,如果我试图从单个实例处理变量,不建议使用单例模式?@Carasuman:单例模式会导致难以测试的代码,尤其不适合web应用程序中的可变数据。依赖关系Injection通常有助于为多个对象提供相同的实例。这实际上取决于您尝试执行的操作。您建议用C#从头开始编写一本书?谢谢您的帮助help@Carasuman:C#简而言之是好的,或者如果你更喜欢头首样式,第二版(或更高版本)头先C#没关系。这对我来说有点像GUI,但是嘿。。。