-1

私はac#コードを書きましたが、それは私にとって正しいようでした

public static BCSMappedTable GetMappedTable(string p_ListName)
    {
        List<BCSDataBase> ConnexionList = BCSManagement.GetAllDataBases();
        bool found = false;
        foreach (BCSDataBase connexion in ConnexionList)
        {
            foreach (BCSMappedTable tabList in connexion.GetMappedTables())
            {
                if (tabList.getListeName().Equals(p_ListName))
                {
                    found = true;
                    return tabList;
                }
            }
        }
        if (found)
            return new BCSMappedTable();
    }

しかし、このエラーは表示され続けます

error : not all code paths return a value

理由がわかりません!私は常に必要な値を返します

4

6 に答える 6

7

関数の最後にfoundfalse の場合、リターン パスがありません...

ループ内にステートメントがあるため、アイテムが見つかるとすぐに関数が終了するため、変数returnは必要ありません。found次のようなものを使用できます。

public static BCSMappedTable GetMappedTable(string p_ListName)
{
    List<BCSDataBase> ConnexionList = BCSManagement.GetAllDataBases();
    foreach (BCSDataBase connexion in ConnexionList)
    {
        foreach (BCSMappedTable tabList in connexion.GetMappedTables())
        {
            if (tabList.getListeName().Equals(p_ListName))
            {
                // return as soon as the item is found
                return tabList;
            }
        }
    }

    // this code won't be executed if the item was found before...
    return new BCSMappedTable();
}
于 2012-09-26T11:17:53.877 に答える
2

最後にあなたが持っているので

if (found) 
            return new BCSMappedTable();

見つからなかったら?

つまり、found が true に設定されたときに関数から返されたため、そこには到達しませんでした。

return new BCSMappedTable();
于 2012-09-26T11:18:10.910 に答える
1
public static BCSMappedTable GetMappedTable(string p_ListName)
    {
        List<BCSDataBase> ConnexionList = BCSManagement.GetAllDataBases();
        bool found = false;
        foreach (BCSDataBase connexion in ConnexionList)
        {
            foreach (BCSMappedTable tabList in connexion.GetMappedTables())
            {
                if (tabList.getListeName().Equals(p_ListName))
                {
                    found = true;
                    return tabList;
                }
            }
        }
        if (!found)
            return new BCSMappedTable();
    }
于 2012-09-26T11:21:08.713 に答える
0

他の部分を実装する

if (found)
            return new BCSMappedTable();
else 
return tablist1;//or something else
于 2012-09-26T11:19:50.603 に答える
0

コードには次のものがあります。

found = true;
return tabList;

この変数は使用されないため、値をローカル変数に設定してからその直後に戻ることは意味がありません。return基本的に、返される値でメソッドを終了します(メソッドのタイプと一致する必要があります)。

エラーが示すように、すべてのパスが値を返すわけではありません。found==false戻り値がない場合。

于 2012-09-26T11:20:56.180 に答える
-2

これを試して

public static BCSMappedTable GetMappedTable(string p_ListName)
{
    List<BCSDataBase> ConnexionList = BCSManagement.GetAllDataBases();
    bool found = false;
    foreach (BCSDataBase connexion in ConnexionList)
    {
        foreach (BCSMappedTable tabList in connexion.GetMappedTables())
        {
            if (tabList.getListeName().Equals(p_ListName))
            {
                found = true;
                return tabList;
            }
        }
    }
    if (found)
      {
        return new BCSMappedTable();
       }
     return found;
}
于 2012-09-26T11:20:42.093 に答える