親をその一般的な子にキャストする

MGGD

私は次の設定をしています:

public class Child<T>: BaseClass
{
    public T Value;
}

public class IntChild: Child<int> { }

public class BoolChild: Child<bool> { }

public class FloatChild: Child<float> { }

public class MyProgram
{
    public BaseClass Source;

    public void SetValue(object val)
    {
        // I want to do something like the following
        // ((Child) Source).Value = (val.GetType()) val;

        // Instead, I have to do it like this
        string temp = val.ToString();
        switch (Source.GetType())  
        {
            case "IntChild":
                ((IntChild) Source).Value = int.Parse(val.ToString());
                break;
            case "BoolChild":
                ((BoolChild) Source).Value = bool.Parse(val.ToString());
                break;
            case "FloatChild":
                ((FloatChild) Source).Value = float.Parse(val.ToString());
                break;
        }
    }
}

BaseClassを変更できません(ToString()を上書きすることしかできませんでした)。

スイッチをより単純なコード行に置き換えるにはどうすればよいですか?次のようなことをしたい

((Child) Source).Value = (val.GetType()) val;

、スイッチの代わりに。これも可能ですか?

カウシャル

SlavaUtesinovによってすでに提供されている回答の小さなバリエーション

   // Only set value if implementation of Child<>. 
   // If any other derived class of BaseClass with value field, then dont set 
   if(source.GetType().BaseType != null 
      && source.GetType().BaseType.IsGenericType 
      && source.GetType().BaseType.GetGenericTypeDefinition() == typeof(Child<>)) 
   {
       Console.WriteLine("Is implementation of Child<>");
       source.GetType().GetField("Value").SetValue(source, val);

   } 
   else 
   {
       Console.WriteLine("Not implementation of Child<>");
   }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

子クラスをその一般的な祖父母に変換する

分類Dev

EntityFrameworkの親子関係をトラバースする一般的なメソッド

分類Dev

複数行のFyne EntryウィジェットでEnterをキャッチする(より一般的には、「親クラス」を呼び出す)

分類Dev

リクエストのすべての例外をキャッチすることは可能ですか?(そして一般的に、モジュールの場合)

分類Dev

Javaで安全なキャスト関数を一般化する

分類Dev

オブジェクトを「実際の」タイプに一般的にキャストする

分類Dev

C#学生と成績の一般的なリストを作成し、それらにアクセスする方法

分類Dev

スキームを使用して一般的なリストを逆にする

分類Dev

一般化された型を、それが1つである場合、その基礎となる識別された共用体にキャストする

分類Dev

C標準に準拠しながら一般的にポインタのアドレスをキャストする方法

分類Dev

一般的な方法とキャスト

分類Dev

Boilderplateを使わずにScalaタイプのパラメーターをより一般的な特性にアップキャストする方法

分類Dev

一般的な戻り値でのキャストを回避するにはどうすればよいですか?

分類Dev

Pythonを使用したPlotlyのプロットに一般的なテキストラベルを追加する

分類Dev

一般的なテキストを検索するためのXPath構文?

分類Dev

一般的な制約に必要なキャスト

分類Dev

Javaで子を親の問題にキャストする

分類Dev

Javaで親クラスを参照する一般的な方法

分類Dev

型キャストと配列の取得による一般的な結果のピーク

分類Dev

Kotlinでの一般的なキャスト

分類Dev

Typescriptでの一般的なキャスト

分類Dev

一般的な基本型へのキャスト

分類Dev

一般的なキャッシングの概念であるRedisを理解する

分類Dev

Erlang - 一般的なテストでテスト スイートをすぐにスキップする

分類Dev

C#で一般的な例外のすべてのバリアントをキャッチする方法

分類Dev

C#で一般的な例外のすべてのバリアントをキャッチする方法

分類Dev

一般的なHListをリストに変換する方法

分類Dev

キャメルレジストリに何かを追加する方法-一般的にJavaを使用

分類Dev

いくつかの例外をキャッチし、一般的な例外を再スローする

Related 関連記事

  1. 1

    子クラスをその一般的な祖父母に変換する

  2. 2

    EntityFrameworkの親子関係をトラバースする一般的なメソッド

  3. 3

    複数行のFyne EntryウィジェットでEnterをキャッチする(より一般的には、「親クラス」を呼び出す)

  4. 4

    リクエストのすべての例外をキャッチすることは可能ですか?(そして一般的に、モジュールの場合)

  5. 5

    Javaで安全なキャスト関数を一般化する

  6. 6

    オブジェクトを「実際の」タイプに一般的にキャストする

  7. 7

    C#学生と成績の一般的なリストを作成し、それらにアクセスする方法

  8. 8

    スキームを使用して一般的なリストを逆にする

  9. 9

    一般化された型を、それが1つである場合、その基礎となる識別された共用体にキャストする

  10. 10

    C標準に準拠しながら一般的にポインタのアドレスをキャストする方法

  11. 11

    一般的な方法とキャスト

  12. 12

    Boilderplateを使わずにScalaタイプのパラメーターをより一般的な特性にアップキャストする方法

  13. 13

    一般的な戻り値でのキャストを回避するにはどうすればよいですか?

  14. 14

    Pythonを使用したPlotlyのプロットに一般的なテキストラベルを追加する

  15. 15

    一般的なテキストを検索するためのXPath構文?

  16. 16

    一般的な制約に必要なキャスト

  17. 17

    Javaで子を親の問題にキャストする

  18. 18

    Javaで親クラスを参照する一般的な方法

  19. 19

    型キャストと配列の取得による一般的な結果のピーク

  20. 20

    Kotlinでの一般的なキャスト

  21. 21

    Typescriptでの一般的なキャスト

  22. 22

    一般的な基本型へのキャスト

  23. 23

    一般的なキャッシングの概念であるRedisを理解する

  24. 24

    Erlang - 一般的なテストでテスト スイートをすぐにスキップする

  25. 25

    C#で一般的な例外のすべてのバリアントをキャッチする方法

  26. 26

    C#で一般的な例外のすべてのバリアントをキャッチする方法

  27. 27

    一般的なHListをリストに変換する方法

  28. 28

    キャメルレジストリに何かを追加する方法-一般的にJavaを使用

  29. 29

    いくつかの例外をキャッチし、一般的な例外を再スローする

ホットタグ

アーカイブ