2011-12-15 12 views
0

私はそうのような一般的な、「getPropertyメソッド」を持っている:prop.positionがベクトル2であるよう一般的な戻り値の型を持つメソッドからプリミティブを返すにはどうすればよいですか?私のコードでは

public T getProperty<T>(int GUID, string property) 
{ 
    PropertyComponent prop; 
    prop = propDict[GUID]; 
    if(property.Equals("visible")) return (T) (Boolean) prop.visible; 
    if(property.Equals("enabled")) return prop.enabled; 
    if(property.Equals("position")) return (T) (Object) prop.position; 
} 

のVisual Studioのコンパイラは、私の第三項のエラーを与えません。 Prop.visibleとprop.enabledはboolなので、このように返すと「boolをTに変換できません」というエラーが出ます(「boolをTに暗黙的に変換することはできません」 2番目)。

この状況でブールを返す正しい方法は何ですか?

+2

'(T)(オブジェクト)'は3つのすべての用語に対して正しいキャストです。 – Marc

+0

@Marcだから答えは "あなたはプリミティブを使うことができない"ということですか? –

答えて

3

ジェネリック型パラメータをクラスまたは構造体(句を使用して)に制約することはできますが、この例ではT型をクラスと構造体(bool値型)の両方として扱います。

参照型オブジェクトインスタンスと値型データ(boolなど)を返す場合は、参照型オブジェクトが唯一の共通の分母であるため、値型をオブジェクトに「ボックス化」する必要があります参照型と値型の間のボクシングは、オブジェクトに値の型を型キャストすると自動的に発生します。したがって、戻り値はすべて(T)(object)に型キャストする必要があります。

+0

+1、良い説明。 – Marc

+0

解決策は、プリミティブで試してみることです。すべての私の 'bool'sを' Boolean'sに変換します。とった。 –

+0

@RavenDreamer 'bool'は' Boolean'と同じです - boolキーワードは単に 'System.Boolean'のエイリアスです。 – phoog

関連する問題