无法在foreach循环外访问C#变量

时间:2013-07-05 20:05:05

标签: c# sharepoint web-parts

我目前正在开发一个SharePoint Web部件,它将填充基于List的一些东西。一切都按预期工作,但我似乎无法访问包含所有列表项的变量!

我想要访问的变量是theValue1

代码:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Administration;

namespace SPListWebPart.VisualWebPart1 {
    public partial class VisualWebPart1UserControl : UserControl {
        public void Page_Load(object sender, EventArgs e) {
            string theValue1;
            SPSite site = new SPSite("http://maindt/sites/dev");
            SPWeb web = site.OpenWeb();
            SPList list = web.Lists["Links"];

            foreach (SPListItem item in list.Items) {
                theValue1 = item["URL"].ToString();
            }
        }
    }    
}

3 个答案:

答案 0 :(得分:2)

要解决错误消息,您只需提供默认值:

string theValue1 = string.Empty;

话虽如此,您当前的代码只会将theValue1设置为list.Items中的 last 网址,因此您的循环可以重写为:

theValue1 = list.Items.Last()["URL"].ToString();

如果您希望字符串代表项目的所有,您可能需要考虑使用以下内容:

theValue1 = string.Join(", ", list.Items.Select(item => item["URL"].ToString()));

如果您想存储所有网址的List<string>,可以使用:

List<string> theValues = list.Items.Select(i => i["URL"].ToString()).ToList();

答案 1 :(得分:0)

您需要为其设置默认值,否则如果没有项目会发生什么?

此外,您当前的代码只获取最后一个值并将其放入字符串中。如果您想要所有值,请使用:

public void Page_Load(object sender, EventArgs e)
{
    string theValue1 = list.Items.Last()["URL"].ToString();
    SPSite site = new SPSite("http://maindt/sites/dev");
    SPWeb web = site.OpenWeb();
    SPList list = web.Lists["Links"];
}

但是,如果您想要的所有值都是EnumerableSelect

public void Page_Load(object sender, EventArgs e)
{
    IEnumerable<string> theValues1 = list.Items.Select(i => i["URL"].ToString());
    SPSite site = new SPSite("http://maindt/sites/dev");
    SPWeb web = site.OpenWeb();
    SPList list = web.Lists["Links"];
}

答案 2 :(得分:0)

  • 您在循环的每次迭代中覆盖theValue1
  • 如果您想在其他地方访问您的变量,请将其置于Page_Load函数
  • 之外