JetBrian的Rider建议使用"make参数类型组件",但我不知道为什么

kug*_*ang 1 c# jetbrains-ide unity-game-engine rider

我目前正在使用JetBrains的Rider作为IDE.

private void RemoveAlert(int idx, Image lockImg)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

我想知道这个提案是否更有效率或习惯性.如果你认识任何人,请回答.

图片是Rider的建议:

图像是Rider的建议.

Fog*_*zie 5

我无法确切地看到你是如何使用变量的(悬停文本覆盖了一些东西)但ReSharper会在你使用派生类但不使用它的任何额外功能时提出这个建议.看起来你正在获取它的gameObject属性的引用,如果你看一下继承heirarchy,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
Run Code Online (Sandbox Code Playgroud)

此外,如果您觉得这很烦人,可以在功能上添加以下内容:

// ReSharper disable once SuggestBaseTypeForParameter
Run Code Online (Sandbox Code Playgroud)

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

// ReSharper disable SuggestBaseTypeForParameter
Run Code Online (Sandbox Code Playgroud)