Есть следующий код для примера:
static void Main(string[] args)
{
Foo(20, gt);
Console.ReadKey();
}
private static int gt
{
get
{
Console.WriteLine("чтение переменной");
return 100;
}
}
static void Foo(int z, int x)
{
Console.WriteLine("метод");
if (z >= 10)
{
Console.WriteLine("переменная больше 10");
}
else
{
Console.WriteLine("переменная = " + x);
}
}
На данный момент он выводит следующее:
чтение переменной
метод
переменная больше 10
Оно и понятно, сначала читается переменная для передачи в качестве параметра, даже если она не используется в коде.
Как организовать метод чтобы использовать переменную "по запросу"? Т.е. чтобы она читалась только в момент ее использования, а не передачи параметром методу.
Ответ
Самый простой вариант — вы должны использовать функцию, которая получит нужное значение.
static void Main(string[] args)
{
Foo(() => 20, () => gt);
Console.ReadKey();
}
private static int gt
{
get
{
Console.WriteLine("чтение переменной");
return 100;
}
}
static void Foo(Func
Пояснение: Func
Ещё один вариант — воспользоваться классом Lazy
static void Main(string[] args)
{
// я пользуюсь непотокобезопасным вариантом, т. к. у нас нет многопоточности в коде
Foo(new Lazy
private static int gt
{
get
{
Console.WriteLine("чтение переменной");
return 100;
}
}
static void Foo(Lazy
Комментариев нет:
Отправить комментарий