如何查看作为参数传递到 Rider 中的模板的类?
Posted
技术标签:
【中文标题】如何查看作为参数传递到 Rider 中的模板的类?【英文标题】:How to see what class was passed into template in Rider as an argument? 【发布时间】:2018-02-06 17:33:22 【问题描述】:我经常在 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?
【问题讨论】:
“模板”是什么意思? T4 模板?还是您在谈论泛型? @nvoigt,我说的是泛型。我说的是作为参数传递给函数的类。 你想在什么时候看到它?很难相信 IDE 在调试时无法向您显示变量的类型... @nvoigt,当我在将类作为参数传递到的函数中时,我想看到它。 【参考方案1】:使用全新安装和默认设置,您可以在调试时看到的“变量”窗口中看到变量类型:
【讨论】:
但是如果我只传递一个没有任何参数的类呢? 没有参数的类是什么意思?如果没有参数,你想知道什么类型?请发布一个示例,这样我就不必猜测您想要什么。 我的意思是一个函数,它只将类作为参数,而不是变量。【参考方案2】:我认为之前标记的答案是正确的,但仅适用于特定情况。
如果我正确理解了这个问题,可以将其改写为“如何使用 Rider 调试器检查泛型参数的类型?”如果是这样,@nvoigt 的答案是正确的,因为调试器会向您显示断点范围内每个变量的类型。因此在所示示例中:
public void DoSomething<T>(T arg)
...
argument
的类型在“变量”窗口中很容易阅读:
但是,如果 generic argument 'T'
不是 method argument 'arg'
的类型,如下所示:
public T DoSomething<T>(string arg)
...
那么arg
将是定义的string
类型。在这种情况下,您需要查看 Frames 窗口 - 左侧的变量。在那里,在第一行,您将能够看到执行停止的方法(通过断点),如果您展开该窗口,您将看到如下内容:
Program.DoSomething<TypePassedAsGenericArgument>()
TypePassedAsGenericArgument
将是类型的全名,也就是命名空间 + 类名:
我认为这个澄清可能会帮助一些新的编码人员。去解决那些BUG!
【讨论】:
以上是关于如何查看作为参数传递到 Rider 中的模板的类?的主要内容,如果未能解决你的问题,请参考以下文章