我试图在另一个方法中使用value,例如在下面的代码中我有这个值userPostedFile.FileName:
public partial class _WebForm1 : System.Web.UI.Page
{
public void Button1_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("\\Upload");
HttpFileCollection uploadedFiles = Request.Files;
Span1.Text = string.Empty;
for (int i = 0; i < uploadedFiles.Count; i++)
{
HttpPostedFile userPostedFile = uploadedFiles[i];
if (userPostedFile.ContentLength > 0)
{
userPostedFile.SaveAs(filepath + "\\" + Path.GetFileName(userPostedFile.FileName));
Span1.Text += "Location where saved: " + filepath + "\\" + Path.GetFileName(userPostedFile.FileName) + "<p>";
}}}
我想在下面的代码中使用它,但是我收到的错误是: 名称在当前上下文中不存在:
private int get_pageCcount(string file)
{
using (StreamReader sr = new StreamReader(Server.MapPath(userPostedFile.FileName)))
{
Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
}}}
答案 0 :(得分:1)
该名称在当前上下文中不存在:
上下文或范围在大括号中定义:{
和}
。这就是变量&#34;生活&#34;并且可以找到。
userPostedFile
被声明为for循环范围内的局部变量。它既不能在循环外部访问,也不能在方法之外访问!
有关详细信息,请参阅Scopes C#
在循环内部,此变量的赋值在每次迭代中都会更改:
HttpPostedFile userPostedFile = uploadedFiles[i];
因此,即使您在类级别声明变量userPostedFile
,这将使其在get_pageCcount
方法中可访问,也不清楚您将在该行中使用哪个实例:
using (StreamReader sr = new StreamReader(Server.MapPath(userPostedFile.FileName)))
假设您要在类的范围内声明变量,就像使用filepath
和uploadedFiles
public partial class _WebForm1 : System.Web.UI.Page
{
HttpPostedFile userPostedFile;
string filepath = Server.MapPath("\\Upload");
HttpFileCollection uploadedFiles = Request.Files;
Span1.Text = string.Empty;
public void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < uploadedFiles.Count; i++)
{
userPostedFile = uploadedFiles[i];
现在可以在userPostedFile
方法中访问变量get_pageCcount
。但现在强烈依赖 时调用方法。如果在单击按钮之前调用它。您将获得NullReferenceException
因为userPostedFile
尚未获得任何价值。如果您在单击按钮后调用它,您将获得uploadedFiles
的最后一个值,因为它将具有在循环结束时分配的值。
答案 1 :(得分:1)
您在userPostedFile.FileName
方法之外调用Button1_Click
。您的变量在Button1_Click
内声明,因此只能在其中调用。这就是为什么当前上下文中不存在名称的原因。
您应至少将userPostedFile
分配给Button1_Click
之外的变量,或者仅在userPostedFile
方法之外声明Button1_Click
。你可以这样做:
示例:
public partial class _WebForm1 : System.Web.UI.Page
{
HttpPostedFile userPostedFile;
public void Button1_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("\\Upload");
HttpFileCollection uploadedFiles = Request.Files;
Span1.Text = string.Empty;
for (int i = 0; i < uploadedFiles.Count; i++)
{
userPostedFile = uploadedFiles[i];
if (userPostedFile.ContentLength > 0)
{
userPostedFile.SaveAs(filepath + "\\" + Path.GetFileName(userPostedFile.FileName));
Span1.Text += "Location where saved: " + filepath + "\\" + Path.GetFileName(userPostedFile.FileName) + "<p>";
}}}
希望它有所帮助!
答案 2 :(得分:0)
public partial class _WebForm1 : System.Web.UI.Page
{
HttpPostedFile userPostedFile;// İf declare userPostedFile in this scope
// u can use another scopes but last value
// in for loop
public void Button1_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("\\Upload");
HttpFileCollection uploadedFiles = Request.Files;
Span1.Text = string.Empty;
for (int i = 0; i < uploadedFiles.Count; i++)
{
userPostedFile = uploadedFiles[i];
if (userPostedFile.ContentLength > 0)
{
userPostedFile.SaveAs(filepath + "\\" + Path.GetFileName(userPostedFile.FileName));
Span1.Text += "Location where saved: " + filepath + "\\" + Path.GetFileName(userPostedFile.FileName) + "<p>";
}}}
答案 3 :(得分:0)
如果方法属于同一类
,则可以使用全局变量public partial class _WebForm1 : System.Web.UI.Page
{
HttpPostedFile userPostedFile = null;
public void Button1_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("\\Upload");
HttpFileCollection uploadedFiles = Request.Files;
Span1.Text = string.Empty;
for (int i = 0; i < uploadedFiles.Count; i++)
{
userPostedFile = uploadedFiles[i];
现在你可以在你的方法中使用它了。
但是如果你的方法在另一个类中,你必须像这样定义这个全局变量:
public static HttpPostedFile userPostedFile = null;
并使用此
_WebForm1.userPostedFile.FileName