Type.IsByRef总是返回false

S_F*_*S_F 0 c# .net-2.0

我想我不明白Type.IsByRef.NET的属性应该表明什么.我认为它应该为引用类型返回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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Tho*_*que 7

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

public void Foo(ref int x) { }
...

var fooMethod = this.GetType().GetMethod("Foo");
var param = fooMethod.GetParameters()[0];
bool isByRef = param.ParameterType.IsByRef; // true
Run Code Online (Sandbox Code Playgroud)

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

  • @S_F好吧,这很棘手......不完全; 这是对的,但措辞不是很清楚;*类型是引用类型*,*类型本身是引用*之间的区别.MSDN文章谈论的是后者 - 你在谈论前者.请注意,您可以同时使用两者:对引用类型的引用(例如,`ref string`) (2认同)