【问题标题】:How to make the compiler know a parameter is property name如何让编译器知道参数是属性名
【发布时间】:2015-09-24 19:57:14
【问题描述】:

使用 xUnit 时,如果我输入代码:

public static IEnumerable<object[]> TestCases
{
        // test data
} 
[Theory, PropertyData("TestCases")]
public  void Test(// some parameter){}

编译器/resharper(我不确定是什么使它起作用)知道“TestCases”(构造函数中的字符串参数)是我定义的静态属性TestCases。

其背后的机制是什么?

感谢cmets。

这是我观察到的。 如果没有具有该名称的相应成员,则该字符串将突出显示为错误。 似乎是关于 R#,当我关闭它时,错误将不再出现。

【问题讨论】:

  • “知道”是什么意思?你在观察什么? (通过反省你的代码,这几乎可以肯定是 R# 很聪明......)
  • “知道”什么时候?元数据是一个强大的功能,但只有当你检查类型时
  • 你的意思是xUnit知道它应该通过调用TestCases方法/属性来获取测试用例,因为你用PropertyData("TestCases")装饰了你的测试方法?
  • 我怀疑这意味着“知道”,如果没有具有该名称的相应成员,则该字符串被突出显示为错误。这就是 R# 对 NUnit ValueSource 属性所做的事情。
  • 整个事情都依赖于 xUnit R# 扩展。早上我会为你写一个解释。

标签: c# visual-studio resharper xunit


【解决方案1】:

如果您在 "TestCases" 字符串上获得突出显示、导航和代码完成,这是 ReSharper 的功能之一。从本质上讲,ReSharper 特别意识到某些字符串标识符实际上与在其他地方找到的符号相关。因此,它为您提供的功能就好像您输入的字符串是一个实际的标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多