C# C“关于缺失的错误”;“出去”;参数,但代码工作正常

C# C“关于缺失的错误”;“出去”;参数,但代码工作正常,c#,parameters,visual-studio-code,out,C#,Parameters,Visual Studio Code,Out,我有一个C#项目,其中包含一个类似以下内容的方法: bool TheMethod(Type arg, out Type output) 之后在文件中调用它,它看起来像这样,只有一个参数: if (TheMethod(someArgument)) VS代码报告此错误: 没有给出与所需的形式化参数相对应的参数 “方法(类型,输出类型)”的参数“输出”(CS7036)[托管] 尽管存在此错误,但代码编译并运行良好。发生什么事?这是代码验证的问题吗?在某些情况下需要out参数,但在其他情况下不需要?

我有一个C#项目,其中包含一个类似以下内容的方法:

bool TheMethod(Type arg, out Type output)
之后在文件中调用它,它看起来像这样,只有一个参数:

if (TheMethod(someArgument))
VS代码报告此错误:

没有给出与所需的形式化参数相对应的参数 “方法(类型,输出类型)”的参数“输出”(CS7036)[托管]

尽管存在此错误,但代码编译并运行良好。发生什么事?这是代码验证的问题吗?在某些情况下需要out参数,但在其他情况下不需要?我是否应该编辑代码,使其输出到本地字段,即使我永远不会使用它


实际代码可以在这里找到:

假设您指的是方法:

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
以及对该方法的调用:

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
#如果调试
如果(!GenericDictionaryAssignableFromType(dictionary.GetType()))
抛出新的InvalidOperationException(“该类型未实现IDictionary”);
#恩迪夫
那么您看到的行为可能与预处理器指令(#if/#endif)的存在有关。如果在调试模式下本地编译代码


代码将抛出与您看到的类型相同的编译器错误。但是,如果您在发布模式下编译/运行(这可能是您的CI/CD和/或其他测试环境的配置方式),代码将不会有任何错误(因为#if/#endif在编译器看到相关代码行之前将其从文件中排除),并且它将按预期运行。

假设您指的是以下方法:

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
以及对该方法的调用:

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
#如果调试
如果(!GenericDictionaryAssignableFromType(dictionary.GetType()))
抛出新的InvalidOperationException(“该类型未实现IDictionary”);
#恩迪夫
那么您看到的行为可能与预处理器指令(#if/#endif)的存在有关。如果在调试模式下本地编译代码


代码将抛出与您看到的类型相同的编译器错误。但是,如果您在发布模式下编译/运行(这可能是您的CI/CD和/或其他测试环境的配置方式),代码将不会有任何错误(因为#if/#endif在编译器看到相关代码行之前将其从文件中排除),它将按预期运行。

您正在调用什么方法?CS7036是一个编译器错误,它不可能正在编译和运行。可能您正在运行引入错误之前的较旧编译版本?您链接到的代码包装在编译器指令中,这意味着它将不会在调试模式下编译。但它应该在版本配置中工作。还要注意,代码是在4天前添加的,所以它刚刚损坏,不应该使用。您正在调用什么方法?CS7036是一个编译器错误,它不可能正在编译和运行。可能您正在运行引入错误之前的较旧编译版本?您链接到的代码包装在编译器指令中,这意味着它将不会在调试模式下编译。不过,它应该在版本配置中工作。还要注意,代码是在4天前添加的,所以它刚刚损坏,不应该使用。谢谢,这是正确的。我遇到的问题是,我正在使用我们自己的
target=debug
构建项目,但这无法启用C#中的
debug
指令。。。非常混乱!谢谢,这是正确的。我遇到的问题是,我正在使用我们自己的
target=debug
构建项目,但这无法启用C#中的
debug
指令。。。非常混乱!