Необходимо объявить переменную, которую Вы тогда проигнорируете. Это обычно имеет место с TryParse (или TryWhatever) шаблон, когда это используется для тестирования законности ввода данных пользователем (например, это может быть проанализировано как число?), не заботясь о фактическом проанализированном значении.
Вы использовали слово, "располагают" в вопросе, который я подозреваю, было просто неудачно - но если параметр имеет тип, который реализует IDisposable, необходимо, конечно, звонить, Располагают, если документация метода явно не указывает, что получение значения не присуждает владение. Я не могу помнить когда-либо видеть метод с доступным out
параметр, хотя, таким образом, я надеюсь, что это было просто неудачным выбором слов.
К сожалению, Вы обязаны передавать что-то, потому что метод требуется установить его. Таким образом, Вы не можете отправить null
, потому что метод, обязанность установила его, аварийно завершился бы.
Один подход для сокрытия уродства должен был бы обернуть метод в другой метод, который делает out
, параметру для Вас нравится так:
String Other_MakeMyCall(String inputParams)
{
String messages;
return MakeMyCall(inputParams, out messages);
}
Тогда можно звонить Other_MakeMyCall
, не имея необходимость играть с out
параметры, в которых Вы не нуждаетесь.
Если исходная функция объявляется как это:
class C
{
public Result MakeMyCall(Object arg, out List<String> messages);
}
можно объявить дополнительный метод как это:
static class CExtension
{
public static Result MakeMyCall(this C obj, Object arg)
{
List<String> unused;
return obj.MakeMyCall(arg, out unused);
}
}
дополнительный метод будет вести себя как перегрузка, которая делает параметр дополнительный.
Компилятор Visual Basic делает это путем создания фиктивной переменной. C# мог сделать это, если можно убедить Microsoft, что это - хорошая идея.
Если класс messages
реализации IDisposable
, Вы не должны игнорировать его. Рассмотрите что-то как следующий подход (может не быть синтаксически корректным, так как я не записал C# в некоторое время):
using (FooClass messages) {
myResult = MakeMyCall(inputParams, messages);
}
Однажды вне using
блок, messages
будет расположен автоматически.
Необходимо передать переменную для параметр. Вы не должны инициализировать переменную прежде, чем передать его:
MyMessagesType messages;
myResult = MakeMyCall(inputParams, out messages);
Как правило, можно просто проигнорировать 'сообщения' после вызова - если потребности 'сообщений', располагающие по некоторым причинам, такие как использование ограниченных системных ресурсов, в этом случае, Вы не должны звонить, Располагают ():
messages.Dispose();
, Если это могло бы использовать существенное количество памяти и это собирается остаться в объеме некоторое время, это должно, вероятно, быть установлено в NULL, если это - ссылочный тип или к новому экземпляру по умолчанию, если это - тип значения, так, чтобы сборщик "мусора" мог исправить память:
messages = null; // Allow GC to reclaim memory for reference type.
messages = new MyMessageType(); // Allow GC to reclaim memory for value type.