Member 13783935 Ответов: 2

Как избавиться от этого недопустимого исключения приведения?


Итак, я постоянно работаю над своим маленьким проектом с большим или меньшим успехом, но оказываюсь перед проблемой, которую, по-видимому, не могу решить самостоятельно. Я получаю исключение InvalidCastException, когда я в основном просто повторно использую функцию, которая уже работает.

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

var c = (customerDB)comboBox1.SelectedItem;
newContact.Name = textBox_Contact_Name.Text.Trim();
newContact.Vorname = textbox_Contact_Firstname.Text.Trim();
newContact.FKKunde = c.PKCustomer;

db.Contacts.Add(newContact);
db.SaveChanges();
Close();

Приведенный выше код-это фрагмент кода, который работает, а ниже-тот, который не работает.
var b = (TArticle)comboBox_Article.SelectedItem;
TPosition newPosition = new TPosition();


newPosition.FKArticle = b.PKArticle;
newPosition.Quantity = (int)numericUpDown_Menge.Value;
newPosition.Position = textBox_Position.Text;
db.TPosition.Add(newPosition);
db.SaveChanges();
Close();

Мне кажется, что это то же самое, но второй не работает должным образом. Исключение создается при объявлении var b.

Maciej Los

Проверьте, какой тип объекта хранится в comboBox_Article.SelectedItem.

var b = comboBox_Article.SelectedItem;
if(typeof(TArticle)==b.GetType())
{
    //further instructions
}

Я почти уверен, что comboBox_Article.SelectedItem это тип объекта (или null).

2 Ответов

Рейтинг:
1

OriginalGriff

Элемент в выпадающем списке является экземпляром a customerDB в первом случае, но это не является примером TArticle или класс, производный от TArticle во втором. Если экземпляр принадлежит классу, который не может быть приведен к требуемому типу, вы получите недопустимое исключение приведения.

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