Если Вы не планируете создание Вашего собственного выпадающего списка (и не использование стандартного выпадающего списка библиотеки), Вы застреваете. Взгляд управления DDL будет основанным на системе, которую Вы выполняете и/или браузер, который представляет вывод.
Ну, в C # нет ничего, что могло бы делать это автоматически для тебя. Вы всегда можете написать свой собственный метод, но, честно говоря, я считаю его менее читабельным. Нужно подумать гораздо больше (ИМО), чтобы понять, что делает ваша последняя строка, чем предыдущая. Когда вы нажимаете {2}
, вы
Несмотря на то, что C # не может сделать это за вас, этот инструмент может здесь помочь.
Resharper, например, предупредит вас, если в строке больше параметров, чем после строки. Я посмотрел, поддерживается ли переупорядочение параметров в Resharper, но в данном случае это не так (R # поддерживает изменение сигнатуры метода, но здесь это не помогает).
Посмотрите на Code Rush от DevEx. Скорее всего, у этого инструмента есть то, что вам нужно.
Запрашиваемая функция не является частью платформы. Вот хороший метод расширения, который я нашел, который предоставляет именованные параметры c #. Я думаю, что это опубликовал Марк Гравелл или один из тех других гуру SO.
static readonly Regex rePattern = new Regex(@"\{([^\}]+)\}", RegexOptions.Compiled);
/// <summary>
/// Shortcut for string.Format. Format string uses named parameters like {name}.
///
/// Example:
/// string s = Format("{age} years old, last name is {name} ", new {age = 18, name = "Foo"});
///
/// </summary>
/// <param name="format"></param>
/// <param name="values"></param>
/// <returns></returns>
public static string FN<T>(this string pattern, T template)
{
Dictionary<string, string> cache = new Dictionary<string, string>();
return rePattern.Replace(pattern, match =>
{
string key = match.Groups[1].Value;
string value;
if (!cache.TryGetValue(key, out value))
{
var prop = typeof(T).GetProperty(key);
if (prop == null)
{
throw new ArgumentException("Not found: " + key, "pattern");
}
value = Convert.ToString(prop.GetValue(template, null));
cache.Add(key, value);
}
return value;
});
}