‘object’ не содержит определения Xamarin Forms

#c# #xamarin.forms

#c# #xamarin.forms

Вопрос:

Я надеюсь, что кто-нибудь сможет помочь, поскольку я новичок в разработке xamarin. Я могу подтвердить, что если я жестко закодирую переменную в ProductID, код будет работать правильно.

Полная ошибка, которую я получаю, заключается в следующем; «Ошибка состояния подавления строки файла проекта описания кода серьезности CS1061 ‘object’ не содержит определения для ‘Product_ID’ и не удалось найти доступный метод расширения ‘Product_ID’, принимающий первый аргумент типа ‘object’ (вам не хватает директивы using или ссылки на сборку?)»

Метод, в котором я получаю эту ошибку, является;

     private async void ListStockTakeServices_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        int ProductID = e.Item?.Product_ID;
        await Navigation.PushModalAsync(new ListViewPage(ProductID));
    }
  

Ниже приведено изображение, которое (насколько я вижу) доказывает, что на самом деле существует переменная «Product_ID»

Окно локальных данных Visual Studio

Заранее большое спасибо

Ответ №1:

это базовый C #. Вам необходимо привести object к правильному типу, чтобы получить доступ к его свойствам

 int ProductID = ((Overviews)e.Item).Product_ID;
  

Комментарии:

1. Это устранило мою проблему, большое вам спасибо

2. Плохой вопрос, отличный ответ.

Ответ №2:

Что касается «почему», это приведение обязательно.
Мы можем наблюдать разницу между тем, что есть во время компиляции, и тем, что есть во время выполнения.

Предупреждение:
слово ‘object’ используется ниже для обозначения object типа или как синоним ‘instance’, ‘value’, ‘the thingy’

Во время компиляции компилятор просматривает типы объектов, и это то, с чем он работает. Он не может определить, что это будет Overviews объект при запуске программы. Все, что он знает, это то, что e.Item имеет тип object . Это своего рода декларация, в которой говорится: «это будет просто object «. Поскольку у object него нет Product_ID свойства, компилятор протестует, говоря: ‘object’ не содержит определения для ‘Product_ID’

Вы можете увидеть объявленный тип e.Items , наведя указатель мыши на e.Items или в документации для ItemTappedEventArgs.Item.

То, что вы видели во время выполнения, является фактическим параметром (в отличие от формального параметра в объявлении метода), в данном случае Overviews объектом. Когда вы пишете свою программу, вы знаете, что это Overviews объект, которого нет у компилятора. Поскольку у нас больше знаний о том, что происходит в программе, мы иногда «исправляем» предположения компилятора. В этом случае мы сообщаем компилятору, что e.Item это не просто object объект, а Overviews объект.

Комментарии:

1. Спасибо, что объяснили это подробнее