我正在尝试访问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语句中被分配时,我似乎无法访问它。
我尝试将其更改为全局变量。但它不起作用,也是一种不好的做法。
那么我该怎么办?我在这里错过了什么吗?
或者有没有解决方法呢?
答案 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 = "";