Мне нужно решить одну проблему в универсальном типе.
Для юнит-теста у меня есть один поддельный тип ScriptManager, подобный этому:
public class FakeScriptManager : ScriptManager
{
public new virtual bool IsNavigating { get; private set; }
}
Мой проверенный метод выглядит следующим образом:
public string GetHistoryPoint<TScriptManager>(string key, TScriptManager scriptManager)
where TScriptManager : ScriptManager
{
TScriptManager realScriptManager = Convert.ChangeType(scriptManager, scriptManager.GetType());
if (realScriptManager.IsNavigating)
{
// Do something
}
}
Метод тестирования выглядит следующим образом:
using (FakeScriptManager scriptManager = new FakeScriptManager(true, false))
{
object value = _handler.GetHistoryPoint(keyExists, scriptManager);
}
Я намереваюсь установить свойство NEW IsNavigating is true для переменной FakeScriptManager.Но это невозможно.Переменная realScriptManager, по-видимому, не может быть преобразована из ожидаемого универсального типа TScriptManager.
Примечание: Отладка, попытка привести непосредственно входной параметр scriptManager с конкретным типом FakeScriptManager, это нормально.
Итак, моя проблема: Как сделать так, чтобы метод GetHistoryPoint общего типа работал должным образом, как я ожидал? Кто-нибудь, пожалуйста, помогите мне?