2

という名前の 1 つの文字列フィールドを持つ config という名前のクラスがありますkey

クラスの GET プロパティを適用すると、プロパティは異なる型 (Int または bool または String) で 1 つの変数キーを返す必要があります。

次のように実装しました。

  public enum RetType {RetInt, RetBool, RetString};
  ...
  public object PolimorphProperty(string key, RetType how) 
  {
      get 
     { 
        switch (how)
        {
         case RetType.RetInt:
           ...;
        case RetType.RetBool:
           ...;
        case RetType.RetString:
           ...;
        }
     }  
 }

しかし、PolimorphProperty が Object 型を返す問題。

オブジェクトではなく、適切な型 (int、bool、string) を取得するには、コードの何を変更すればよいですか?

4

5 に答える 5

1

これを行う:

public T PolimorphProperty<T>(string key)
{
    return (T) objectInstanceHere;
}

使用例:

int i = PolimorphProperty<int>("somekey");

そして、これはhttp://www.antiifcampaign.com/をサポートしています

さらに言えば、ポリモーフィック コードでは をswitchできるだけ避けてください。if

于 2012-07-15T12:37:23.020 に答える
0
public T PolimorphProperty<T>(string key, T how)
{
    //todo
}
于 2012-07-15T12:22:34.280 に答える
0

これはどうですか、「PolimorphProperty」の元の実装がプロジェクトに残っていると考えてください。これを追加します。

public TType PolimorphProperty<TType>(string key, RetType how) 
 {
     return (TType)PolimorphProperty(key, how);
 }
于 2012-07-15T12:37:11.343 に答える
0

C# のAnytype実際にはオブジェクトです。
あなたの質問から私が理解したことから、あなたはこの方法でメソッドを呼び出します:
PolimorpthProperty(key, RetType.SomeType)
メソッドはオブジェクトを返します。このように使用する必要があります:
int key = (int)PolimorthProperty(key, RetType.RetInt);
これはUnboxingと呼ばれます。

于 2012-07-15T12:25:42.203 に答える
0

私が正しく理解していれば、あなたは次のようなものを探しています:

public T GenericMethod<T>(string key)
{
    var ret = new object(); // Retrieve object from whatever...
    return (T) ret;
}

public void UsageExample()
{
    int typedResult = GenericMethod<int>("myKey");
}

タイプ T に基づいて異なるロジックで異なるオブジェクトをフェッチしようとしている場合は、とにかくタイプをオンにする必要があります。コレクションが特定のタイプのオブジェクトをサポートしない限り (通常はサポートする)、コンパイラは認識しないためです。何をすべきか。
この場合は、この質問を確認してください。

于 2012-07-15T12:39:16.757 に答える