【问题标题】:How to see what class was passed into template in Rider as an argument?如何查看作为参数传递到 Rider 中的模板的类?
【发布时间】: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,当我在将类作为参数传递到的函数中时,我想看到它。

标签: c# debugging generics ide rider


【解决方案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!

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多