2013-07-19 2 views
2

Мне нужно сделать вызов функции, которая возвращает некоторое значение, которое мне не нужно. Обычно я просто подключу это к ignore. Но что, если возвращаемое значение - IDisposable?Каков правильный способ «игнорировать» IDisposable?

Помогает ли оператор ignore избавиться от переданного аргумента? Из исходного кода этого, похоже, это не делает:

[<CompiledName("Ignore")>] 
let inline ignore _ =() 

Так что для этой цели, вместо того, чтобы писать use __ = someFunc(), я использую эту функцию:

let inline dispose (x : #IDisposable) = x.Dispose() 

// usage example 
someFunc() |> dispose 

Интересно, является ли это право способ сделать это или, может быть, уже есть встроенный оператор, подобный этому? Или будет хорошо использовать ignore?

ответ

5

Я бы использовал using.

using (someFunc()) ignore 

Другой вариант use, который является языковая конструкция, а не функция.

use x = someFunc() 
() 
+0

Я думаю, 'является предпочтительным use' - с' using', 'Dispose' будет называться в конце выражения функции или лямбда; с 'use',' Dispose' будет вызываться в конце блока кода. – andreister

+1

Отлично, 'using x ignore' выглядит хорошо, и он будет обрабатывать исключения правильно. Я изменил бы свою функцию 'dispose' на' let dispose x = using x ignore' вместо этого. – MisterMetaphor

+0

BTW, 'use _ = ...' не будет компилироваться, поскольку одно подчеркивание не будет использоваться как идентификатор. – MisterMetaphor

5

насчет:

someFunc().Dispose() 
+0

Простой и функциональный! Хотя, вероятно, это не так удобно, как 'ignore', потому что вы не можете' |> 'to' Dispose() '. – MisterMetaphor

+2

Coz Dispose - это метод, а не функция – Ankur

+0

+1 - Короткий и очевидный. – Daniel

Смежные вопросы