有关缺少“输出”参数的C#错误,但代码正常运行

时间:2019-05-21 14:53:37

标签: c# parameters visual-studio-code out

我有一个C#项目,其中包含一个看起来像这样的方法:

bool TheMethod(Type arg, out Type output)

然后在文件中稍后调用它,它看起来像这样,只有一个参数:

if (TheMethod(someArgument))

VS代码报告此错误:

  

没有给出与所需形式相对应的参数   TheMethod(Type,out Type)的参数'output'(CS7036)[托管]

尽管出现此错误,代码仍可编译并正常运行。这是怎么回事?这是代码验证的问题吗?在某些情况下是否需要out参数,而在其他情况下则不需要吗?我应该编辑代码,以便即使我永远不会使用它时,也可以将其输出到本地字段吗?

实际代码可在此处找到:https://github.com/godotengine/godot/blob/master/modules/mono/glue/Managed/Files/MarshalUtils.cs#L156

1 个答案:

答案 0 :(得分:2)

假设您的方法是

static bool GenericIDictionaryIsAssignableFromType(Type type, out Type keyType, out Type valueType)

和方法调用:

#if DEBUG
            if (!GenericIDictionaryIsAssignableFromType(dictionary.GetType()))
                throw new InvalidOperationException("The type does not implement IDictionary<,>");
#endif

然后,您看到的行为很可能与预处理器指令(#if /#endif)的存在有关。如果您以DEBUG模式在本地编译代码,则

Debug Compiler Setting

代码将引发您所看到的那种编译器错误。但是,如果您在RELEASE模式下编译/运行(这可能是您的CI / CD和/或其他测试环境的配置方式),该代码将没有任何错误(因为#if /#endif排除了相关的代码行)从文件开始,直到编译器看到它们为止。