根据this,字符串(或字符串)是引用类型。
但是给出了:
Type t = typeof(string);
然后
if (t.IsByRef) ...
返回false
为什么?
编辑:经过一些快速测试后,我显然误解了IsByRef的目的...... 因为即使使用类名来代替'string',也会返回false。我正在编写一个泛型类,并且想要测试当泛型实例化时传入的类型是值还是引用类型。如何测试呢?
答案 0 :(得分:11)
您应该使用IsValueType
代替:
bool f = !typeof (string).IsValueType; //return true;
对于IsByRef
,此属性的目的是确定参数是通过ref还是通过值传递给方法。
示例您有一个方法,其中a
由ref传递:
public static void Foo(ref int a)
{
}
您可以确定a
是否通过引用传递:
bool f = typeof (Program).GetMethod("Foo")
.GetParameters()
.First()
.ParameterType
.IsByRef; //return true
答案 1 :(得分:11)
有“引用类型” - 我们有!type.IsValueType
- 然后有表示引用的类型到任何 - 无论是目标是值类型或引用类型。
当您说void Foo(ref int x)
时,x
被称为“通过引用传递 ”,因此ByRef
。
在幕后,x
是 类型为ref int
的引用,与{{1}对应}。
请注意,这些是两种不同的“参考”,彼此完全正交。
(事实上,还有第三种“参考”,typeof(int).MakeReferenceType()
,只是System.TypedReference
。
还有第四种类型的引用,每个C程序员都知道的类型 - 指针struct
。)
答案 2 :(得分:5)
您想检查它是否为value type。
typeof(object).IsValueType :- false
typeof(int).IsValueType :- true