srilekhamenon Ответов: 1

Преобразование класса в дженерики в C#


class BackupVirtualDataSource : AbstractVirtualListDataSource
    {
 List<BackUpInfo> Objects;
        public int ItemCount = 0;
        //BackUpInfo
        public BackupVirtualDataSource(VirtualObjectListView listView, List<BackUpInfo> ObjList)
            : base(listView)
        {
            this.Objects = ObjList;
            ItemCount = (ObjList == null) ? 0 : ObjList.Count;
        }

        public override int GetObjectIndex(object model)
        {
            return this.Objects.IndexOf((BackUpInfo)model);
        }

        public override object GetNthObject(int n)
        {
            BackUpInfo p = null;
            try
            {
                p = this.Objects[n % this.Objects.Count];
                return p;
            }
            catch (Exception ex)
            {
                cGlobalSettings.oLogger.WriteLogException("| BackupVirtualDataSource.cs::GetNthObject() |", ex);
            }
            finally 
            {
                p = null;
            }
            return p;
            
        }

        public override int GetObjectCount()
        {
            return ItemCount;
        }

       
    }

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

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

class BackupVirtualDataSource : AbstractVirtualListDataSource
    {
 List<T> Objects;
        public int ItemCount = 0;
        //BackUpInfo
        public BackupVirtualDataSource(VirtualObjectListView listView, List<T> ObjList)
            : base(listView)
        {
            this.Objects = ObjList;
            ItemCount = (ObjList == null) ? 0 : ObjList.Count;
        }

        public override int GetObjectIndex(object model)
        {
            return this.Objects.IndexOf((T)model);
        }

        public override object GetNthObject(int n)
        {
            T p = null;
            try
            {
                p = this.Objects[n % this.Objects.Count];
                return p;
            }
            catch (Exception ex)
            {
                cGlobalSettings.oLogger.WriteLogException("| BackupVirtualDataSource.cs::GetNthObject() |", ex);
            }
            finally 
            {
                p = null;
            }
            return p;
            
        }

        public override int GetObjectCount()
        {
            return ItemCount;
        }

       
    }

Philippe Mori

Ваш GetNthObject функция слишком длинна и вводит в заблуждение. Следующий код намного лучше и гораздо проще для понимания.

public override object GetNthObject(int n)
{
  try
  {
    return this.Objects[n % this.Objects.Count];
  }
  catch (Exception ex)
  {
    cGlobalSettings.oLogger.WriteLogException(
      "| BackupVirtualDataSource.cs::GetNthObject() |", ex);
  }
  return null;
}

1 Ответов

Рейтинг:
9

F-ES Sitecore

Вам нужно добавить общее определение к классу, и тогда оно будет доступно внутри класса

class BackupVirtualDataSource<T> : AbstractVirtualListDataSource


srilekhamenon

хорошо я пропустил общее определение класса :)

BillWoodruff

+5