Использование универсального класса С# с Neo4jClient

Я хотел бы создать универсальный класс, который создает узлы для нескольких типов классов узлов. См. пример ниже:

public NodeReference<TObject> CreateObject(TObject objectType)
        {  
            NodeReference<TObject> nodeReference = 0;
            nodeReference = clientConnection.Create<TObject> (objectType);
            return nodeReference;
        }

Однако я продолжаю получать следующую ошибку: введите описание изображения здесь


person Mike Barnes    schedule 25.09.2013    source источник
comment
Я считаю, что это общий объект в С#, я думаю, я не слишком уверен. Видел, как это используется в примере в книге.   -  person Mike Barnes    schedule 25.09.2013


Ответы (1)


Вы можете определить свой метод следующим образом:

public NodeReference<TObject> CreateObject(TObject objectType)
    where TObject: class //<-- NEW BIT HERE
{  
    NodeReference<TObject> nodeReference = 0;
    nodeReference = clientConnection.Create<TObject> (objectType);
    return nodeReference;
}

помещая where TObject: class, вы говорите, что тип «TObject» всегда должен быть классом (или ссылочным типом). Вам также может понадобиться поставить:

where TObject: class, new()

но я не могу вспомнить - бит new() означает, что класс должен иметь конструктор без аргументов (который может быть конструктором по умолчанию).

person Charlotte Skardon    schedule 25.09.2013
comment
Является ли where TObject: class тем, как вы ссылаетесь на класс, как это предлагается в сообщении об ошибке? - person Mike Barnes; 25.09.2013
comment
Это общее ограничение параметра. Это означает, что параметр типа должен быть ссылочным типом. Ваше сообщение об ошибке указывает, что вам нужен ссылочный тип. - person Sam Leach; 25.09.2013
comment
@MikeBarnes Да, у вас есть ссылочные типы и типы значений, ссылочные типы — это классы, типы значений — это такие вещи, как int, double и т. д. Как правило, если вы можете установить для него значение null (MyObj o = null;), то это ссылочный тип, который делает то же самое для тип значения даст ошибку времени компиляции (int i = null;). - person Charlotte Skardon; 26.09.2013