[英]Generic function using an abstract class
我正在嘗試創建一個靜態函數,將一個抽象類的實例替換為另一個實例。 (我簡化了代碼,將重點放在無法正常工作的地方):
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
}
}
我試圖在函數的定義中用AbstractData替換T,或強制轉換T,但沒有一個起作用。
我發現的唯一解決方案是使用Abstract Data的另一個實例作為參數(並具有“ in”和“ out”實例):
static void Analyze<T>(int limitValue, AbstractData abstractDataIn, AbstractData abstractDataOut)
但是,那時我將失去該函數通用部分的優勢。
您知道我為什么會有這個錯誤,以及如何糾正它嗎?
謝謝 !
T
是Type
,不是Type
的實例。 如果要創建並返回新實例,則必須這樣編寫:
static T Analyze<T>(int limitValue, AbstractData abstractData) where T : AbstractData, new()
{
T t = new T();
t.GivenValues = abstractData.GivenValues;
t.MaxValue= abstractData.GivenValues[0];
foreach (var data in abstractData.GivenValues)
{
if (data<limitValue){
t.MaxValue = data;
}
}
return t;
}
您的返回值類型為T
另一個選擇是傳遞T
的實例:
static void Analyze<T>(int limitValue, AbstractData abstractData, T t) where T : AbstractData
{
t.GivenValues = abstractData.GivenValues;
t.MaxValue= abstractData.GivenValues[0];
foreach (var data in abstractData.GivenValues)
{
if (data<limitValue){
t.MaxValue = data;
}
}
}
這樣就無需return
新創建的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.