【问题标题】:C# error about missing "out" parameter, but the code works fine关于缺少“out”参数的 C# 错误,但代码工作正常
【发布时间】:2019-05-21 14:53:36
【问题描述】:

我有一个 C# 项目,其中包含如下所示的方法:

bool TheMethod(Type arg, out Type output)

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

if (TheMethod(someArgument))

而VS Code报这个错误:

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

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

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

【问题讨论】:

  • 你在调用什么方法?
  • CS7036 是一个编译器错误,它不可能正在编译和运行。
  • 也许您运行的是在引入错误之前的旧编译版本?
  • 您链接到的代码包含在编译器指令中,这意味着它不会在调试模式下编译。它应该在发布配置中工作。
  • 另请注意,代码是 4 天前添加的,所以它只是损坏了,不应该使用。

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


【解决方案1】:

假设你的意思是方法:

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 排除了相关的代码行在编译器看到它们之前从文件中提取),它将按预期运行。

【讨论】:

  • 谢谢,这是正确的。我遇到的问题是我正在使用我们自己的target=debug 构建项目,但这并没有启用 C# 中的DEBUG 指令......非常令人困惑!
猜你喜欢
  • 2013-05-22
  • 2018-01-31
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2021-05-15
  • 2022-01-20
  • 2014-03-19
  • 1970-01-01
相关资源
最近更新 更多