ようなタイプの変数を表現するのは、私は一般的な機能で働いているとしましょう:C#がタイプ
public interface IFoo
{
Type Type;
TValue Read<TValue>();
}
public class Foo : IFoo {}
var f = new Foo();
私が書きたいのですが:
var value = f.Read<f.Type>();
が、これはエラーを与える:
fは変数ですが、タイプのように使用されます
私は条件文を書くことができます:それは冗長だから
object value;
if (f.Type == typeof(bool))
{
value = f.Read<bool>();
}
if (f.Type == typeof(byte))
{
value = f.Read<byte>();
}
...
が、これは実際には動作しません、私は事前に可能なすべての種類が分からない場合は不完全なもの、および値は、オブジェクトの代わりのタイプであることがあります。
解決策はありますか?
いいえ、あなたはこれを行うことはできません。「値」のタイプは何ですか?実行時の型情報を扱うときは、既知の型にキャストするまで動的に処理する必要があります。この場合、 'Object Read(Type t)'メソッドを追加して、このメソッドに委譲することで汎用バージョンを実装することができます。 – Lee
インターフェイスを汎用化するとどうなりますか? – juharr
厳密に言うと、shoulsを使用するプロパティを使用するため、エラーが発生します。var value = f.Read(); /私は全体的な意図をとにかく理解していません –