我使用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进行哪种测试以测试它是否为值类型?
答案 0 :(得分:1)
尝试:
bar.SampleMember.GetType().IsPrimitive
在你的例子中,你特别提到"十进制" Microsoft没有将十进制定义为基元。如果您还检查它是否是特定的小数,除了IsPrimitive
之外,它可以为您提供所需的:
bar.SampleMember.GetType().IsPrimitive || bar.SampleMember is decimal
答案 1 :(得分:1)
C#中没有原始类型的定义。所有类型都继承System.Object
,它们分为两类,reference
类型和value
类型。
以上图片摘自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只能将类型理解为值类型或引用类型。