Определение ‘Name’ не найдено

#c# #asp.net #class #methods

#c# #asp.net #класс #методы

Вопрос:

У меня есть класс, определенный в пространстве имен:

 namespace Artworking
{
    public class Category
    {
        int ID {get;set;}
        string Name {get;set;}

        public Category(int ID, string Name)
        {
            this.ID = ID;
            this.Name = Name;
        }
        public Category(int ID)
        {
            using (CrystalCommon.MainContext db = new CrystalCommon.MainContext())
            {
                var q = (from c in db.tblArtworkTemplateCategories where c.ID == ID select c).SingleOrDefault();
                this.ID = q.ID;
                this.Name = q.CatName;
            }
        }
    }
}
  

На моей странице содержимого я извлекаю все категории из другой функции и добавляю к ним элемент управления listbox:

         // Category select
        Artworking.Category[] Cats = Artworking.CommonFunctions.FetchAllCategories(Master.LoggedInUser.Client.ID);
        foreach(Artworking.Category C in Cats){
            ListItem NewItem = new ListItem();
            NewItem.Text = C.Name;
            NewItem.Value = C.ID;
            CategorySelect.Items.Add(NewItem);
        }
  

Однако по какой-то причине в NewItem.Text = C.Name строке он выдает:

CS1061: ‘Художественная обработка.Категория’ не содержит определения ‘Name’ и никакого метода расширения ‘Name’, принимающего первый аргумент типа

Я немного запутался в этом, я думал, что все это определено правильно?

‘Художественная обработка.Удалось найти ‘Category’ (вам не хватает директивы using или ссылки на сборку?)

Ответ №1:

Вам все еще нужно добавить public перед объявлениями свойств внутри Category класса.

Ответ №2:

Ваше свойство Name должно быть помечено public (как и должно быть ID , исходя из того факта, что вы пытаетесь получить к нему доступ за пределами класса.)

 public class Category
{
    public int ID { get;set; }
    public string Name { get;set; }

    ....
}
  

Еще одно незначительное предложение — почему бы не ссылаться на Artworking пространство имен в вашем коде с помощью using инструкции? Это сделает ваш код немного аккуратнее, вместо того, чтобы постоянно вводить полное пространство имен в нескольких строках:

 using Artworking;

// Category select
Category[] Cats = CommonFunctions.FetchAllCategories(Master.LoggedInUser.Client.ID);

foreach(Category C in Cats)
{
    ....
}