Как при повторном вызове функции не вызвать внутренную функцию в С#?

Есть функция

  private void checkAndLoad()
 {


     string GenerateOrderNumber()
     {
         const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
         var random = new Random();
         return new string(Enumerable.Repeat(chars, 8)
           .Select(s => s[random.Next(s.Length)]).ToArray());
     }

     string orderNumber = GenerateOrderNumber();




     if (!string.IsNullOrEmpty(orderNumber))
     {


         string QueryGetItogPrice1 = $"select ({Numeric.Value} * price) as itog_cena from titles where title = '{TitlesList.Text}'";

         SqlCommand cmd = new SqlCommand(QueryGetItogPrice1, sqlConn);

         string summa = $"{cmd.ExecuteScalar():F2}";


         string QueryGetPrice = $"SELECT COALESCE(price, 0) AS ytd_sales FROM titles where title = '{TitlesList.Text}'";

         SqlCommand cmd3 = new SqlCommand(QueryGetPrice, sqlConn);

         string price = $"{cmd3.ExecuteScalar():F2}";






         DataTable table = new DataTable();
         table.Columns.Add("№ Заказа", typeof(string));
         table.Columns.Add("Магазин", typeof(string));
         table.Columns.Add("Издания", typeof(string));
         table.Columns.Add("Кол-во", typeof(string));
         table.Columns.Add("Услове оплаты", typeof(string));
         table.Columns.Add("Цена", typeof(string));
         table.Columns.Add("Сумма", typeof(string));




         table.Rows.Add($"{orderNumber}", $"{StoresList.Text}", $"{TitlesList.Text}", Numeric.Value, Terms.Text, price, summa);


         DataGridView1.DataSource = table;
     }

 }

Нужно что бы при повторном вызове функции checkAndLoad() не вызывалась внутреняя функция GenerateOrderNumber().


Ответы (1 шт):

Автор решения: aepot

Сделать полем например

private string orderNumber = null;
private readonly Random rnd = new Random(); 

private string GenerateOrderNumber()
{
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    return new string(Enumerable.Repeat(chars, 8)
        .Select(s => s[rnd.Next(s.Length)]).ToArray());
}

private void checkAndLoad()
{
    if (string.IsNullOrEmpty(orderNumber))
    {
        orderNumber = GenerateOrderNumber();
    }

    string QueryGetItogPrice1 = $"select ({Numeric.Value} * price) as itog_cena from titles where title = '{TitlesList.Text}'";
    // ... остальной код
}
→ Ссылка