Как при повторном вызове функции не вызвать внутренную функцию в С#?
Есть функция
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}'";
// ... остальной код
}