我目前正在為運行時后處理管理撰寫代碼。
我想讓一個通用方法更有效,但我收到 2 條錯誤訊息:
- CS0118:“procType”是一個變數,但用作型別(在 out 引數處)
- CS0119:'Fog' 是一種型別,在給定的背景關系中無效(呼叫方法時)
void SetPostProc<T>(T procType, string IOHID, bool defval) where T : VolumeComponent
{
byte value = Convert.ToByte(IOHandler.GetVal(IOHID, defval));
volumeProfile.TryGet(out procType EFX);
{
};
}
SetPostProc(Fog, "", false);
我究竟做錯了什么?
提前感謝您的幫助!
uj5u.com熱心網友回復:
首先,如果Fog真的是一個型別,而不是一個變數,那么你沒有使用呼叫泛型函式的正確方法。如果泛型型別從第一個引數中不明顯,那么您必須像這樣顯式指定它:
Fog myFogObject = ...;
SetPostProc<Fog>(myFogObject , "", false);
但是,如果myFogObject在編譯時知道型別,在您的情況下似乎就是這樣,您不必指定泛型型別,因為編譯器會自動計算出來:
Fog myFogObject = ...;
SetPostProc(myFogObject , "", false);
這應該可以解決您的第二個錯誤(CS0119)。
第二個問題是procType一個變數參考了一個型別的物件T,而不是一個型別。TryGet您必須通過傳入泛型型別引數來呼叫該函式,T如下所示:
volumeProfile.TryGet<T>(out T EFX);
根據您嘗試使用此代碼執行的操作,我認為您甚至不需要T procType引數,只需要T通用引數就足夠了:
void SetPostProc<T>(string IOHID, bool defval) where T : VolumeComponent
{
byte value = Convert.ToByte(IOHandler.GetVal(IOHID, defval));
volumeProfile.TryGet(out T EFX);
{
// ...
};
}
編輯:如果您仍想獲得函式TryGet外部的結果,則SetPostProc需要將函式的第一個引數宣告為out引數:
void SetPostProc<T>(out T procObj, string IOHID, bool defval) where T : VolumeComponent
{
byte value = Convert.ToByte(IOHandler.GetVal(IOHID, defval));
volumeProfile.TryGet(out procObj);
{
// ...
};
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419082.html
標籤:
