none
型の既定値をリフレクションで知りたい RRS feed

  • 質問

  • int型の既定値はdefault(int)で得られますが、型をリフレクションで調べたい場合はどうすればよいでしょうか
    obj.GetType().DefaultValueと言った具合にできればよいのですがそれらしきものがありませんでした。
    http://www.mahoroba.ne.jp/~mw_ken
    2009年11月7日 12:12

回答

  • ValueType 派生の型の場合は Activator なりでインスタンス生成、そうでなけりゃ null でいいと思います。
    Type が typeof(Enum) の場合だけ問題ですけど。
    • 回答としてマーク 三輪の牛 2009年11月7日 13:19
    2009年11月7日 12:55
  • > enumもいけてるみたいです。

    ちょっと気になったんですが、

    public enum TestEnum
    {
        zero = 1, one, two
    }
    こうすると、GetDefaultValue(typeof(TestEnum)) は TestEnum.zero ではなく 0 が返ってきますね。
    ただ、この場合 default(TestEnum) も 0 になるみたいです。
    なので 「enum もいけてる」 と言っていいとは思いますが、必ずしも enum の最初の値がデフォルトというわけではないようです。
    青柳 臣一 (Shinichi Aoyagi)
    • 回答としてマーク 三輪の牛 2009年11月9日 2:20
    2009年11月9日 1:24

すべての返信

  • ValueType 派生の型の場合は Activator なりでインスタンス生成、そうでなけりゃ null でいいと思います。
    Type が typeof(Enum) の場合だけ問題ですけど。
    • 回答としてマーク 三輪の牛 2009年11月7日 13:19
    2009年11月7日 12:55
  • Hongliangさんありがとうございます。即解決でした。
    enumもいけてるみたいです。

        object GetDefaultValue(Type type)
        {
          return type.IsValueType ? Activator.CreateInstance(type) : null;
        }
    
        public enum TestEnum
        {
          zero, one, two
        }
    
        [Test]
        public void test5()
        {
          Assert.That((int)GetDefaultValue(typeof(int)) == 0);
          Assert.That((TestEnum)GetDefaultValue(typeof(TestEnum)) == TestEnum.zero);
          Assert.That((string)GetDefaultValue(typeof(string)) == null);
        }
    


    http://www.mahoroba.ne.jp/~mw_ken
    2009年11月7日 13:19
  • > enumもいけてるみたいです。

    ちょっと気になったんですが、

    public enum TestEnum
    {
        zero = 1, one, two
    }
    こうすると、GetDefaultValue(typeof(TestEnum)) は TestEnum.zero ではなく 0 が返ってきますね。
    ただ、この場合 default(TestEnum) も 0 になるみたいです。
    なので 「enum もいけてる」 と言っていいとは思いますが、必ずしも enum の最初の値がデフォルトというわけではないようです。
    青柳 臣一 (Shinichi Aoyagi)
    • 回答としてマーク 三輪の牛 2009年11月9日 2:20
    2009年11月9日 1:24
  • Shinichi Aoyagiさんありがとうございます。
    その点は考えていませんでした。目的は未割り当ての状態の値を得ることでしたので、結果問題ないです。
    私が気がつかない視点からの考察ありがとうございました。


    http://www.mahoroba.ne.jp/~mw_ken
    2009年11月9日 2:20