Передать тип универсальному методу (вложенный универсальный) - PullRequest
6 голосов
/ 03 июля 2011

Как я могу вызвать следующий метод, пока у меня нет TRootEntity, но есть только его TYPE:

public void Class<TRootEntity>(Action<IClassMapper<TRootEntity>> customizeAction) where TRootEntity : class;

Конечная цель - запустить следующий код

var mapper = new ModelMapper();
mapper.Class<MyClass>(ca =>
{
    ca.Id(x => x.Id, map =>
    {
        map.Column("MyClassId");
        map.Generator(Generators.HighLow, gmap => gmap.Params(new { max_low = 100 }));
    });
    ca.Property(x => x.Something, map => map.Length(150));
});

Используется для создания динамического NHibernate HBM. Более подробная информация доступна здесь

По аналогичному вопросу см. здесь и здесь .

Ответы [ 2 ]

10 голосов
/ 03 июля 2011

Вы не можете закодировать универсальные методы для запуска, передав тип времени выполнения.

Универсальные типы должны иметь тип во время компиляции.

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

10 голосов
/ 03 июля 2011

Посмотрите на этот ответ от великого Джона Скита.Вы должны быть в состоянии адаптировать его к вашим потребностям.

...