如何查看作为参数传递到 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 中的模板的类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rider 中调试类库项目

如何在 CloudFormation 中将字符串列表作为参数传递?

如何将构造函数(可变参数)作为模板参数传递?

android如何为自定义的类传递参数?

如何将对象参数作为哈希表传递给 json arm 模板?

思考java中core属性的特殊值,如何传递到底是值ins中的类目,全解答过程