如何查看在Rider中作为参数传递给模板的类?

时间:2018-02-06 17:33:22

标签: c# debugging generics ide rider

我正在Rider中调试C#模板,并且想知道它是否可行,如果是,那么如何在Rider中看到哪个类进入模板?

示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine("Hello, world!");
        }

        public void DoSomething<T>() {
            //What is a type of T?
        }
    }
}

2 个答案:

答案 0 :(得分:1)

使用全新安装和默认设置,您可以在&#34;变量&#34;中看到变量类型。调试时可以看到的窗口:

enter image description here

答案 1 :(得分:0)

我认为先前标记的答案是正确的,但仅适用于特定情况。

如果我正确理解了该问题,可以将其改为“如何使用Rider调试器检查通用参数的类型?”。如果是这样,则@nvoigt的答案是正确的,因为调试器会向您显示断点范围内的每个变量的类型。因此,在所示示例中:

public void DoSomething<T>(T arg)
{
    ...
}

在变量窗口中,argument的类型很容易阅读: enter image description here

但是generic argument 'T'不是method argument 'arg'的类型,如下所示:

public T DoSomething<T>(string arg)
{
    ...
}

然后,arg的类型将为string。在这种情况下,您需要查看“框架”窗口-“变量”的左侧。在那里,在第一行上,您将能够看到停止执行的方法(通过断点),并且如果您扩展该窗口,您将看到类似以下内容的

Program.DoSomething<TypePassedAsGenericArgument>()

其中TypePassedAsGenericArgument将是类型的全名,又名-名称空间+类名:

enter image description here

我认为这种澄清可能会帮助一些新的编码人员。去买那些臭虫!