Member 13106843 Ответов: 2

Я получаю код ошибки CS0162 " обнаружен недостижимый код"


        bool CheckSubproject() {
            #pragma warning disable 649 // Unreachable code detected 0162 changed to 649
            if (sub != "")


                return true;
                string result = "";
//(string) is the unreachable code that is detected
            


            if (project == "bmte") {
                            List<fileinfo> files = SearchFiles(dataPath);
                            FileInfo adAssistant = files.Find(x => x.Name == "AdAssistant.cs");
                            if (adAssistant != null)
                                result = "pro";
                            else
                                result = "standard";
                        }
                        
            if (result != "") {
                FileInfo fileInfo = SearchFiles(dataPath).Find(x => x.Name == "Fixer.cs");

                if (fileInfo != null) {
                    StreamReader fileR = new StreamReader(fileInfo.FullName);
                    string code = fileR.ReadToEnd();
                    fileR.Close();

                    Regex re = new Regex(@"const\s+string\s+sub\s+\=\s+""{2}\;");
                    code = re.Replace(code, "const string sub = \"" + result + "\";");

                    StreamWriter fileW = new StreamWriter(fileInfo.FullName);
                    fileW.WriteLine(code);
                    fileW.Close();

                    StopDownloadIssues();
                    AssetDatabase.Refresh();
                    
                }
            }
            return false;
                     #pragma warning restore 649 // Unreachable code detected  # CS0162
        }


Что я уже пробовал:

Я попытался установить строку в Public, Local и static. Кажется, с этой строкой ничего не работает. У меня есть # pragma warning disable and enable для кода 649, но при удалении кода я получаю более 60 ошибок. С кодом единственная ошибка связана со строкой.

Bernhard Hiller

Вы что-то пропустили {} когда вы скопировали свой код сюда? Чтобы получить это предупреждение компилятора, код должен выглядеть следующим образом

if (sub != "")
 {
     return true;
     string result = "";
}
- и теперь ясно видно, почему эта строка - "недостижимый код".

2 Ответов

Рейтинг:
1

Member 7870345

Глядя на код

bool CheckSubproject() {
#pragma warning disable 649 // Unreachable code detected 0162 changed to 649
if (sub != "")
    return true;
string result = "";
//(string) is the unreachable code that is detected
...

если компилятор отмечает string result=""; как недостижимый это означает, что компилятор выводит, что суб переменная имеет значение, которое обязательно отчетливо это "".
Таким образом, строки, соответствующие исполняемому при sub=="", никогда не будут использоваться.


Рейтинг:
0

Patrice T

Цитата:
код ошибки CS0162 " обнаружен недостижимый код"

Это сообщение об ошибке не говорит вам, что есть ошибка там, где вы ее видите, оно говорит вам, что предыдущий код сделан таким образом, что строка "недостижимого кода" никогда не будет выполнена.
Во время компиляции компилятор может обнаружить это sub никогда не будет пустым и, следовательно, всегда будет "возвращать истину", а следующий код никогда не будет выполнен.
Это может быть сделано специально, для проверки, таким образом, предупреждение. Ваша ПРАГМА преобразует предупреждение в ошибку.

Таким образом, вы можете сделать любое изменение в строке, это никогда не решит проблему, потому что это не проблема.