Type.IsByRef 总是返回 false

本文关键字:返回 false IsByRef Type | 更新日期: 2023-09-27 18:34:38

我想我不明白 .NET Type.IsByRef属性应该表示什么。我认为它应该为引用类型返回 true,为值类型返回 false,因此与Type.IsValueType属性相反。不过,对于显然是引用类型的类型,我无法让它返回 true。下面是一个示例:

using System.Text;
public class Program
{
    static void Main(string[] args)
    {
        try
        {
            int i = 0;
            Console.WriteLine(i.GetType().IsByRef);    // returns false - OK
            Exception e = new Exception();
            Console.WriteLine(e.GetType().IsByRef);    // returns false - ??
            StringBuilder sb = new StringBuilder();
            Console.WriteLine(sb.GetType().IsByRef);   // returns false - ??
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        Console.ReadKey(true);
    }
}

我在这里错过了什么?

Type.IsByRef 总是返回 false

对于通过引用传递的参数,IsByRef为真:

public void Foo(ref int x) { }
...
var fooMethod = this.GetType().GetMethod("Foo");
var param = fooMethod.GetParameters()[0];
bool isByRef = param.ParameterType.IsByRef; // true

它与值类型和引用类型无关。若要检查类型是否为值类型,请检查IsValueType(对于值类型返回 true,否则返回 false(。