Ошибка при вызове дженерик класса

163
17 апреля 2022, 14:20

Есть статический класс с дженериком

public static class Validations<T> where T: class
{
    private static AnketaContext context = new AnketaContext();
    public static bool CanUserStartTest(string TestableCode, Filials UserFilial, ref string accessName, ref string message)
    {      
        //Тут проходит первоначальная проверка валидности и выкидывается результат в случае ошибки
        
        //Этот результат выдаётся, если все предыдущие проверки прошли успешно
        return CheckAccessForTestable(TestableCode, ref accessName, ref message);
    }
    private static bool CheckAccessForTestable(string code, ref string accessName, ref string errors)
    {
        //TODO
        switch (typeof(T).Name)
        {
            case "Test360": //TODO
            case "MotivationTest"://TODO
            default://TODO
        }
    }
}

Пытаюсь протестировать метод этого класса

var result = Validations<Test360>.CanUserStartTest(TestableCode, filial, ref accessName, ref message);
Assert.AreEqual(ExpectedResult, result);
Assert.AreEqual(ExpectedErrMessage, message);
Assert.AreEqual(ExpectedAccessName, accessName);

Класс Validations<Test360> подчёркивается красным и выводится ошибка

Неуниверсальный тип "Validations<Test360>" нельзя использовать с аргументами типа

Вроде всё делал по гайдам, и сам дженерик класс построил более менее верно. Но почему-то использовать его не получается.

Answer 1

Кажется, что ругается на Validations, а именно на то что этот класс не дженерик. Возможно стоит убедится в том что класс действительно дженерик(возможно дженериком является метод этого класса), или возможно дженерик реализация класса имеет модификатор доступа internal или еще какой то, который не доступен в той сборке, в которой тестируется.

Upd:

Судя по коду, Вы делаете все правильно. Но есть еще один момент который стоит проверить. Возможно в Вашем проекте или какой то библиотеке, от которой зависит Ваш проект, есть класс с таким же наименованием, который не является generic'ом. Что бы это проверить попробуйте указать полное имя класса Validations (т.е. с пространством имен). Возможно Вы не добавили using того пространства имен в котором определен Generic класс Validations. Так же в Visual Studio можно быстро перейти к определению типа, просто установите курсор на Validations<...> и нажмите F12, или в контекстном меню нажмите "Go To Definition", если эти действия привели Вас не к Вашему Generic классу Validation, значит просто нужно указать нужный тип.

READ ALSO
Как убрать трение в Unity2D?

Как убрать трение в Unity2D?

Чтобы убрать трение при столкновении со стенами я добавлял колайдеру персонажа физический материал и в нём убирал Friction на 0, но из-за отсутсвия...

128
как работать с браузером через c#?

как работать с браузером через c#?

Хочу сделать программу для эмуляции работы пользователей, например на сайт, выполняет поиск через заполнение значение инпута и нажатие какой...

181
Уместно ли использовать DependencyService в указанном случае?

Уместно ли использовать DependencyService в указанном случае?

В решении XamarinForms стоит следующая задача: необходимо реализовать систему, которая будет следить за подключением/отключением USB-устройств

221
Как скомпилировать файлы и папки в один .exe

Как скомпилировать файлы и папки в один .exe

Я экспортировал все внутриновсти спомощью dotPeek, получил папки и файлыМне нужно было немного подкоректировать код(добавить пару ссылок), я сделал...

114