Тип данных объекта в 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
блок.