【问题标题】:JetBrains Rider suggests "make parameter type Component". Why?JetBrains Rider 建议“制作参数类型组件”。为什么?
【发布时间】:2018-06-27 20:45:57
【问题描述】:

我目前使用 JetBrains Rider 作为 IDE。

private void RemoveAlert(int idx, Image lockImg)
{
    ...
}

在编写上面的代码时,我收到了 Rider 的建议,将 RemoveAlert 方法的 Image 类型参数转换为 Component。我不知道为什么。

我想知道这个建议是否更有效或更习惯。有知道的请回答。

Rider 建议截图:

【问题讨论】:

  • 如果你写了一个接受Dog的方法,但你从不调用Bark,你还不如让它接受Animal,然后它就变成了一个更有用的方法 因为有更多可能的调用方式。
  • 您使用的是Rider,那么它与ReSharper(这是一个VS插件)无关。它们共享相同的语言引擎和许多其他功能,但它们是不同的产品。
  • BTW Re# 和 Rider 共享 resharper-unity 插件 github.com/JetBrains/resharper-unity 在 Rider 中是捆绑的,在 Re# 中可以显式安装。
  • @LexLi:Rider 文档和营销明确声明它使用 Resharper 检查。此外,在 Rider 中启用/禁用检查的语法仍然是 // ReSharper disable [inspection id]。一个问题可能是特定于骑手的,也可能是特定于 Resharper 的,但这个问题适用于两者。虽然学究可能会说您说这不是 Resharper 问题在技术上是正确的,但 OP 可以愉快地接受 Resharper 专家的回答,而 Resharper 用户可以愉快地咨询这个问题以获得答案。

标签: c# unity3d jetbrains-ide rider


【解决方案1】:

我无法确切了解您是如何使用该变量的(悬停文本覆盖了一些内容),但 ReSharper 会在您使用派生类而不是其任何额外功能时提出建议。看起来您获得了对其gameObject 属性的引用,如果您查看继承层次结构,Component 是具有该属性的最低级别的类:

UnityEngine.UI.Image
UnityEngine.UI.MaskableGraphic
UnityEngine.UI.Graphic
UnityEngine.EventSystems.UIBehaviour 
UnityEngine.MonoBehaviour
UnityEngine.Behaviour
UnityEngine.Component <- has gameObject property
UnityEngine.Object    <- doesn't have gameObject property

另外,如果你觉得这很烦人,你可以在函数上加上以下内容:

// ReSharper disable once SuggestBaseTypeForParameter

或者您可以将其放在文件本身的顶部以涵盖其所有功能:

// ReSharper disable SuggestBaseTypeForParameter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多