是否有测试来查看未知对象是否为值类型?

时间:2015-05-07 20:53:15

标签: c#

我使用Value Type的定义。

如果我得到一个对象成员

class SampleClass{

    object SampleMember{ get; set; }
}

并将其设置为一个函数......

public SampleClass foo(SampleClass bar){

      bar.SampleMember = 6m;
      return bar;
}

需要在另一个测试中;测试需要知道它是引用类型还是值类型(在这种情况下是十进制)。

public SampleClass blick(SampleClass spok){

    if( TestUtilities.IsAValueType(bar.SampleMember) )
    {
        DoBlickWorkOnSpok(spok)
    }
    return spok;
}

可以对spok进行哪种测试以测试它是否为值类型?

3 个答案:

答案 0 :(得分:1)

尝试:

bar.SampleMember.GetType().IsPrimitive

在你的例子中,你特别提到"十进制" Microsoft没有将十进制定义为基元。如果您还检查它是否是特定的小数,除了IsPrimitive之外,它可以为您提供所需的:

bar.SampleMember.GetType().IsPrimitive || bar.SampleMember is decimal

答案 1 :(得分:1)

C#中没有原始类型的定义。所有类型都继承System.Object,它们分为两类,reference类型和value类型。

enter image description here

以上图片摘自C#语言规范第5版。

答案 2 :(得分:0)

原始类型可以确定 as:

var p = 0; bool result = p.GetType().IsPrimitive

值类型可以确定

为:

     var a = 0;
     bool x = a is System.ValueType;
在这种情况下,

// x = true

也是定义其原始类型的编译器。

CLR只能将类型理解为值类型或引用类型。