Я пытаюсь создать статическую функцию, заменяющую экземпляр абстрактного класса другим. (Я упростил код, чтобы сосредоточиться на том, где он не работает):
abstract class AbstractData
{
public int MaxValue;
public int[] GivenValues;
}
static class AnalyzeData
{
static void Analyze<T>(int limitValue, AbstractData abstractData) where T : AbstractData
{
T.GivenValues = abstractData.GivenValues; //error : T is a type parameter which is not valid in the given context
T.MaxValue= abstractData.GivenValues[0]; // same error
foreach (var data in abstractData.GivenValues)
{
if (data<limitValue){
T.MaxValue = data;
}
}
abstractData = T; //same error
}
}
Я пытался заменить T на AbstractData в определении функции или привести T, но это не сработало.
Единственное решение, которое я нашел, - это использовать другой экземпляр Abstract Data в качестве параметра (и иметь экземпляры in и out):
static void Analyze<T>(int limitValue, AbstractData abstractDataIn, AbstractData abstractDataOut)
Но тогда я потерял бы преимущество общей части функции.
Знаете ли вы, почему у меня есть эта ошибка, и как я могу ее исправить?
Спасибо!