C # ошибка об отсутствии параметра "out", но код работает нормально - PullRequest
0 голосов
/ 21 мая 2019

У меня есть проект на C #, который содержит метод, который выглядит примерно так:

bool TheMethod(Type arg, out Type output)

А потом он вызывается в файле, он выглядит примерно так, только с одним аргументом:

if (TheMethod(someArgument))

И VS Code сообщает об этой ошибке:

Не указан аргумент, соответствующий необходимому формальному параметру 'output' для 'TheMethod (Type, out Type)' (CS7036)) [Управляется]

Несмотря на эту ошибку, код компилируется и работает нормально.В чем дело?Это проблема с проверкой кода?Требуется ли параметр out в некоторых случаях, но не в других?Должен ли я редактировать код так, чтобы он выводился в локальное поле, даже если я никогда не буду его использовать?

Фактический код можно найти здесь: https://github.com/godotengine/godot/blob/master/modules/mono/glue/Managed/Files/MarshalUtils.cs#L156

1 Ответ

2 голосов
/ 21 мая 2019

Предполагая, что вы имеете в виду метод:

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

Тогда наблюдаемое вами поведение, вероятно, связано с существованием директив препроцессора.(# если / # ENDIF).Если вы компилируете код локально в режиме DEBUG,

Debug Compiler Setting

, код выдаст ошибку компилятора, которую вы видите.Тем не менее, если вы скомпилируете / запустите в режиме RELEASE (это может быть то, как ваш CI / CD и / или другие тестовые среды могут быть настроены), код не будет иметь никаких ошибок (так как # if / # endif исключает соответствующие строки кодаиз файла до того, как компилятор их увидит), и он будет работать как положено.

...