関数を次のように宣言できるようにしたい
void foo(<any value type>[] data){}
C# 2.0 で。私がそれを次のように宣言した場合
void foo(ValueType[] data){}
それはコンパイルされますが、 data[] の要素は、から派生したものとして扱われます。object
たとえば、次のようなことは言えません
fixed (void* pData = data){}
パラメーターとして void* を使用することは避けたいと思います。値型の配列を受け入れて、管理されていない操作を実行できるようにしたいだけです。
ETA: また、これには同じ問題があります。
public static unsafe void foo<T>(T[] data) where T:struct{
fixed(void *p = data){}
}
あなたが疑問に思っていた場合に備えて。マネージド型として扱われるために失敗する問題を修正しました -- CS0208、マネージド型へのポインターを宣言できません。以下の「mm」を参照してください。私は彼が正しいと思う...おそらくそれは不可能だ.