我有一个C#项目,其中包含一个看起来像这样的方法:
bool TheMethod(Type arg, out Type output)
然后在文件中稍后调用它,它看起来像这样,只有一个参数:
if (TheMethod(someArgument))
VS代码报告此错误:
没有给出与所需形式相对应的参数 TheMethod(Type,out Type)的参数'output'(CS7036)[托管]
尽管出现此错误,代码仍可编译并正常运行。这是怎么回事?这是代码验证的问题吗?在某些情况下是否需要out参数,而在其他情况下则不需要吗?我应该编辑代码,以便即使我永远不会使用它时,也可以将其输出到本地字段吗?
答案 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模式在本地编译代码,则
代码将引发您所看到的那种编译器错误。但是,如果您在RELEASE模式下编译/运行(这可能是您的CI / CD和/或其他测试环境的配置方式),该代码将没有任何错误(因为#if /#endif排除了相关的代码行)从文件开始,直到编译器看到它们为止。