2010-01-26 1 views
2

Я пишу функцию, которая принимает параметр, и для этого параметра требуется тип TEntity. Я хочу, чтобы иметь возможность передать его конкретный тип во время выполнения, но у меня возникли проблемы при получении его компиляции:Как установить тип TSomething во время выполнения на C#?

public LoadOperation LoadQuery(EntityQuery<???> query) 
     { 
      LoadOperation loadOperation = DomainContext.Load(query,LoadBehavior.MergeIntoCurrent, false); 
      return loadOperation; 
     } 

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

EntityQuery<Person> q = DomainContext.GetPerson(); 
LoadQuery(q); 

Я пробовал разные вещи, чтобы сделать эту работу, но я в недоумении. Что мне нужно сделать?

ответ

7

В зависимости от того, что ваш DomainContext.Load() функция выглядит следующим образом:

public LoadOperation LoadQuery<T>(EntityQuery<T> query) 
{ 
    LoadOperation loadOperation = DomainContext.Load(query,LoadBehavior.MergeIntoCurrent, false); 
    return loadOperation; 
} 

А потом еще использовать его так же, как вы делали раньше:

EntityQuery<Person> q = DomainContext.GetPerson(); 
LoadQuery(q); 

Система типов должна вывести вы имеете в виду LoadQuery<Person>() версия функции из аргумента.

К сожалению, я подозреваю, что это также означает некоторую ревизию вышеупомянутой функции Load().

+0

Функция загрузки является частью служб WCF RIA, поэтому она не моя. Будет ли единственный способ сделать то, что я пытаюсь сделать, чтобы переопределить эту функцию? – johnnywhoop

+0

Эта проблема заключается в том, что тип первого параметра функции: вы можете передать какой-либо общий «EntityQuery »? Я предполагаю, что нет. Если вы можете изменить функцию так, чтобы вы могли, это хорошо. Поскольку вы не можете, вам понадобится способ массирования вашей переменной запроса во что-то, что эта функция примет. –

+1

Я до сих пор не получил его на работу, но ваш ответ объяснил многое, что происходит. Я отметил это как ответ, потому что это точно, проблема в функции Load(), и поэтому мне нужно сосредоточиться. Поскольку Load() требует TEntity, мне нужно будет выяснить, как изменить его, чтобы взять T или обработать мой запрос как TEntity. – johnnywhoop