Ответ 1
Используйте [ValueProvider]
Из Аннотации кода, которые в настоящее время поддерживаются Resharper 10, лучшим кандидатом будет использовать этот атрибут. Из приведенной ссылки:
ValueProviderAttribute
Для параметра, который, как ожидается, будет одним из ограниченного набора значения. Укажите поля этого типа, которые должны использоваться в качестве значений для этого Параметр.
К сожалению, я не понял, как это работает. Возможно, это ошибка в моей версии 9.2 Resharper.
Что я пробовал до сих пор:
namespace ValueProviderSample
{
public static class MyValuesContainer
{
public static readonly string[] Values = { "one", "two", "three" };
}
public class MyMethodContainer
{
public string MyMethod([ValueProvider("ValueProviderSample.MyValuesContainer.Values")]
string parameter)
{
return string.Empty;
}
}
}
Даже если вы заработаете, вам все равно придется заполнить список значений.
И, конечно же, вы можете разработать свою аннотацию/расширение кода для Resharper.
Почему бы не использовать строковый типизированный объект вместо строки?
Иногда вместо использования string
и int
мы могли бы использовать классы с более сильным типом нашего собственного дизайна. Поскольку, похоже, вы управляете своим кодом, вместо использования string
с именем css в нем вы можете создать новый тип, например CssClass
.
Вам просто нужно добавить в качестве готового события вызов генератору, который анализирует каждый css в проекте и динамически создает такой класс:
public class CssClass
{
public string Name { get; private set; }
public static CssClass In = new CssClass("in");
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="T:System.Object"/>.
/// </summary>
private CssClass(string name)
{
Name = name;
}
}
и тогда ваш образец будет выглядеть следующим образом:
public class MySample
{
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
CssClass cssClass)
{
// ...
}
public void Usage()
{
MyTextBoxFor(html, expression, CssClass.In);
}
}