无法访问Using()语句c#wp8中指定的字符串变量

时间:2013-10-30 06:55:30

标签: c# visual-studio-2012 windows-phone-8

我正在尝试访问using语句之外的字符串,其值在using语句中分配,如下所示。

我收到错误“使用未分配的局部变量'savedUrl'”。

customItem.name = ld.Name;
customItem.Location = new GeoCoordinate(ld.Latitude, ld.Longitude, 0);
string savedUrl;
using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (iso.FileExists(string.Format("{0}.jpeg", ld.Title)))
    {
        savedUrl = string.Format("{0}.jpeg", ld.Title);
    }
}
addSignPosts();
addLabel(ARHelper.AngleToVector(customItem.Bearing, WCSRadius), customItem.name, savedUrl);

正如您所看到的,我在using语句之外声明了字符串'savedUrl',以便它在using语句之外有一个范围。但是当它在using语句中被分配时,我似乎无法访问它。

我尝试将其更改为全局变量。但它不起作用,也是一种不好的做法。

那么我该怎么办?我在这里错过了什么吗?

或者有没有解决方法呢?

3 个答案:

答案 0 :(得分:2)

是的 - 如果iso.FileExists(string.Format("{0}.jpeg", ld.Title))返回false,那么您将不会为savedUrl分配值。在这种情况下,您希望savedUrl具有什么价值?这与using语句无关 - 它只是 关于if语句。

例如,如果您希望该值为null,如果该文件不存在,您可以反转逻辑并首先为其分配“候选”值,如果文件没有,则将其设置为null存在:

string savedUrl = string.Format("{0}.jpeg", ld.Title);
using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (!iso.FileExists(savedUrl))
    {
        savedUrl = null;
    }
}

或者也许使用条件运算符:

string savedUrl;
using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
{
    string candidateUrl = string.Format("{0}.jpeg", ld.Title);
    savedUrl = iso.FileExists(candidateUrl) ? candidateUrl : null;
}

请注意,在这两个代码段中,我已将代码更改为仅在一个位置调用string.Format - 这样可以更轻松地在以后更改代码。

答案 1 :(得分:1)

您已声明该变量但尚未为其指定任何值。并且一个赋值在if语句中,意味着它是有条件的,并且可能不会被赋值。所以,这是编译器的合法错误 试试:

string savedUrl = "";

AND

if(!String.IsNullOrEmpty(savedUrl)
    addLabel(ARHelper.AngleToVector(customItem.Bearing, WCSRadius), customItem.name, savedUrl);
else
    // Do something here, as the variable is empty.

答案 2 :(得分:1)

首先尝试给它一个初始的空字符串值,以避免错误:

string savedUrl = "";