Рейтинг:
2
BillWoodruff
using System;
using System.Collections.Generic;
namespace MyProject
{
public class Models
{
public static class Vars
{
public static readonly Dictionary<string, string> VarToValue = new Dictionary<string, string>
{
{"var1", "value1"},
{"var2", "value2"},
{"var3", "value3"},
{"var4", "value4"}
};
public static string GetValueFromVar(string svar)
{
if (VarToValue.ContainsKey(svar))
{
return VarToValue[svar];
}
throw new ArgumentException($"{svar} is not a valid key");
}
}
}
}
Значение любой переменной в 'Vars теперь можно получить из любого места пространства имен' MyProject:
строка test1 = MyProject.Models.Vars.GetValueFromVar("var1");
Golden Basim
да, это в том случае, если я знаю, что такое переменная, которую пользователь будет называть. пользователь будет писать только имя переменной в текстовом поле.text = var1
BillWoodruff
см. пересмотренный ответ
Golden Basim
Да, я думал об этом раньше, но эта переменная уже была вызвана во многих других местах. но все же ваше решение-лучшее для новых проектов. спасибо
Richard Deeming
Словарь делегатов будет работать для вашего существующего кода.
Golden Basim
этот класс содержит линии 4000 может быть 80-100 вар, вар имя-это имя запроса, значение VAR является экс текста запроса :-
// получить количество недостач
публичная статическая строка getItems_Shortages_Count_QUERY = @"
Создайте процедуру `getItemsShortagesCount`(в searchVar varchar(200))
НАЧАТЬ
Выберите * из st_items s, st_plug_manufacturer m, где stitems_Name, например CONCAT('%', searchVar , '%') или
s.stitems_Pharma_ActiveIngredient как CONCAT('%', searchVar , '%') или
m.manu_Name, например CONCAT('%', searchVar , '%') или
s.stitems_Code =searchVar;
КОНЕЦ ";
Рейтинг:
1
Richard Deeming
Вариант ответа Билла, который будет работать с вашими существующими полями и все равно должен быть быстрее, чем отражение:
static class Vars
{
public static string var1= "value1";
public static string var2= "value2";
public static string var3= "value3";
public static string var4= "value4";
private static readonly IReadOnlyDictionary<string, Func<string>> Map = new Dictionary<string, Func<string>>(StringComparer.OrdinalIgnoreCase)
{
[nameof(var1)] = () => var1,
[nameof(var2)] = () => var2,
[nameof(var3)] = () => var3,
[nameof(var4)] = () => var4,
};
public static string GetValueFromVar(string varName)
{
if (string.IsNullOrEmpty(varName)) throw new ArgumentNullException(nameof(varName));
if (!Map.TryGetValue(varName, out var fn)) throw new ArgumentException($"'{varName}' is not a valid key.", nameof(varName));
return fn();
}
}