Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 未声明为静态时,无法访问Web用户控件成员变量_C#_Asp.net_Static_Webusercontrol_Member Variables - Fatal编程技术网

C# 未声明为静态时,无法访问Web用户控件成员变量

C# 未声明为静态时,无法访问Web用户控件成员变量,c#,asp.net,static,webusercontrol,member-variables,C#,Asp.net,Static,Webusercontrol,Member Variables,我正在使用C#创建一个web用户控件,以便在服务器中播放一些.wav文件。下面是我的代码 public partial class WaveFilePlayer : System.Web.UI.UserControl { //private string[] files; private static string[] files; protected void ButtonLoad_Click(object sender, EventArgs e) {

我正在使用C#创建一个web用户控件,以便在服务器中播放一些.wav文件。下面是我的代码

public partial class WaveFilePlayer : System.Web.UI.UserControl
{
    //private string[] files;
    private static string[] files;

    protected void ButtonLoad_Click(object sender, EventArgs e)
    {
        string resourcePath = ConfigurationManager.AppSettings["ResourcePath"];
        string searchPattern = ConfigurationManager.AppSettings["SearchPattern"];

        files = System.IO.Directory.GetFiles(path, searchPattern);
    }

    protected void ButtonPlay_Click(object sender, EventArgs e)
    {
        int selectedIndex = ListBoxFiles.SelectedIndex;

        SoundPlayer soundPlayer = new SoundPlayer(files[selectedIndex]);
        soundPlayer.Play();
    }
如上面的代码所示,我将
string[]files
声明为一个成员变量。然后我在
按钮load\u Click
方法中分配它。但是当我试图在
按钮play\u Click
方法中访问它时,它抛出一个
NullReferenceException
,除非
string[]files
声明为静态


这是否意味着在asp.net页面中加载用户控件时,不会创建
System.Web.UI.UserControl
的新对象?这是否意味着当多个客户端(浏览器)尝试播放.wav文件时,服务器上只会创建一个
字符串[]文件的实例供所有客户端使用?

我怀疑问题根本不是无法访问它。我强烈怀疑问题在于您有两个不同的请求,因此有两个不同的
WaveFilePlayer
实例-因此,当您执行
按钮lay\u Click
时,
files
变量将为空,除非您编写了一些代码在请求之间保持它


这里的选项是查看状态或某些服务器端会话。您不应该使用静态变量,因为这基本上意味着您在所有请求(针对所有用户)之间共享了一个变量。

我怀疑问题根本不是它无法访问。我强烈怀疑问题在于您有两个不同的请求,因此有两个不同的
WaveFilePlayer
实例-因此,当您执行
按钮lay\u Click
时,
files
变量将为空,除非您编写了一些代码在请求之间保持它


这里的选项是查看状态或某些服务器端会话。您不应该使用静态变量,因为这基本上意味着您在所有请求(对于所有用户)之间共享了一个变量。

您所说的“不可能访问它”是什么意思?您遇到了什么错误?@JonSkeet它在访问
文件
变量时抛出了一个
NullReferenceException
。好吧,我怀疑它在您取消引用
文件
变量的值时抛出了一个NullReferenceException。只要访问它就可以了,并且会得到一个
null
引用,原因在我的答案中。请在以后的问题中更具体一些-“不可能访问”听起来像是编译时错误…@JonSkeet谢谢,我以后会尽量更具体一些..你说的“不可能访问”是什么意思?您遇到了什么错误?@JonSkeet它在访问
文件
变量时抛出了一个
NullReferenceException
。好吧,我怀疑它在您取消引用
文件
变量的值时抛出了一个NullReferenceException。只要访问它就可以了,并且会得到一个
null
引用,原因在我的答案中。请在以后的问题中更具体一些-“不可能访问”听起来像是编译时错误…@JonSkeet谢谢,我会尽量在将来更具体一些。@manas:我答案的第二段给出了备选方案。基本上,您必须以某种方式传播数据-通过客户端或服务器。这是编写web应用程序的一个基本部分。很抱歉,对我来说,理解第二部分的第一部分有点困难paragraph@manas:哪一位?视图状态?您是否尝试搜索“asp.net视图状态”?关于它有很多信息。同样,搜索“asp.net会话”也会获得大量的点击率。@manas:我的答案的第二段给出了备选方案。基本上,您必须以某种方式传播数据-通过客户端或服务器。这是编写web应用程序的一个基本部分。很抱歉,对我来说,理解第二部分的第一部分有点困难paragraph@manas:哪一位?视图状态?您是否尝试搜索“asp.net视图状态”?关于它有很多信息。同样,搜索“asp.net会话”也会获得大量的点击率。