Получение исключения неявного преобразования при вызове универсального метода.Как правильно это сделать?
Вот мои определения интерфейса и класса:
public interface TestData
{
string field { get; set; }
string fieldName { get; set; }
string type { get; set; }
}
public class TestClass
{
public static T Call<T>(string Project, string type) where T : TestData
{
var returning = GETCG<T>(test, type);
return (T)Convert.ChangeType(returning, typeof(T), CultureInfo.InvariantCulture);
}
private static T GETCG<T>(string test, string type) where T : TestData
{
var fields = nodees.Cast<XmlNode>().Select(x => new
{
// some data
}).ToList();
if (fields != null)
{
return (T) Convert.ChangeType(templateFields, typeof(T),
CultureInfo.InvariantCulture);
}
else
{
return (T)Convert.ChangeType("SomeString", typeof(T),
CultureInfo.InvariantCulture);
}
}
}
Я получаю следующее исключение:
Тип 'System.Collections.Generic.List«нельзя использовать в качестве параметра типа« T »в универсальном типе или методе« TestClass.Call (string, string) ».Не существует неявного преобразования ссылок из 'System.Collections.Generic.List' в 'Test.TestData'
В строке кода ниже:
var test = TestClass.Call<List<TestData>>("ProjName", "Audio");
Если вы видитев методе GETCG
я возвращаю различные типы List
и string
.Методы Call
и GETCG
реализуют интерфейс TestData
.Могу ли я объяснить, почему я получаю эту ошибку, и как я могу улучшить этот код, помня, что мне нужно вернуть strings
и List
из TestClass