0

以下に示すように、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 ステートメント内で割り当てられていると、アクセスできないようです。

グローバル変数に変更してみました。しかし、それは機能しておらず、悪い習慣でもあります。

それで、私は何をすることになっていますか?ここで何か不足していますか?

または、これに対する回避策はありますか?

4

3 に答える 3

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 か所でのみ呼び出すようにコードを変更したことに注意してください。これにより、後で一貫してコードを変更しやすくなります。

于 2013-10-30T06:59:05.907 に答える
1

変数を宣言しましたが、そこに値を割り当てていません。そして、1 つの代入はifステートメント内にあり、条件付きであり、代入されない可能性があることを意味します。したがって、これはコンパイラによる正当なエラーです。
試す:

string savedUrl = "";

if(!String.IsNullOrEmpty(savedUrl)
    addLabel(ARHelper.AngleToVector(customItem.Bearing, WCSRadius), customItem.name, savedUrl);
else
    // Do something here, as the variable is empty.
于 2013-10-30T06:58:39.793 に答える
1

エラーを回避するために、最初に空の文字列の初期値を指定してみてください。

string savedUrl = "";
于 2013-10-30T06:59:21.500 に答える