Тип данных объекта в C#

Я столкнулся с проблемой, связанной с переменной областью действия, пожалуйста, предложите мне хорошее решение этой проблемы.

Ошибка: временная доза не существует в текущем контексте.

        if (cause_list_type_fk == 1)
        {
            Regularcause temp = (Regularcause) obj;
        }
        else if (cause_list_type_fk == 2)
        {
            urgentcauselist temp = (urgentcauselist) obj;
        }
        else 
        {
            supplementryTable temp = (supplementryTable)obj;
        }


            //
            // loging info to a file
            //
            using (StreamWriter w = System.IO.File.AppendText(@"D:\log-entriesSupply.txt"))
            {
                string tmp = "-->Hearing id: " + hearing_id + "-->bench id: " + bench_id + "-->pary id: " + party_id + "\n";
                Log(tmp +  "-->case_id= " + case_id + "-->= " + temp.caseno + "-->temp.Id= " + temp.Id, w);
                w.Close();
            }

1 ответ

Прежде всего: вам нужно объявить temp переменная вне if блок, иначе он не будет виден за пределами этого блока.

Второе: из вашего кода похоже, что вы пытаетесь использовать поля caseno а также Id вашей temp, но в вашем if-else условия вы назначаете объекты трех разных типов Regularcause, urgentcauselist а также supplementryTable к той же переменной. Вероятно, все эти типы содержат такие поля, но вы не можете сделать это так, как пытаетесь.

Возможное решение: создать интерфейс, скажем

public interface IMyInterface
{
    object caseno, Id
}

Конечно, он должен содержать ваши настоящие имена и типы полей. Это просто образец.

Сделай свои уроки Regularcause, urgentcauselist а также supplementryTable реализуя этот интерфейс.

А потом объявить temp переменная, как

IMyInterface temp = obj as IMyInterface;

вместо вашего if-else блок.

Другие вопросы по тегам