Вы можете избежать размышлений и упростить все, используя словарь Action
s:
public class Foo
{
public int Id { get; set; }
public string Bar { get; set; }
public string FooBar { get; set; }
public string Fizz { get; set; }
public string Buzz { get; set; }
private static Dictionary<string, Action<Foo, string>> _propertySetters =
new Dictionary<string, Action<Foo, string>>()
{
{ "Bar", (foo, value) => foo.Bar = value },
{ "FooBar", (foo, value) => foo.FooBar = value },
{ "Fizz", (foo, value) => foo.Fizz = value },
{ "Buzz", (foo, value) => foo.Buzz = value },
};
public static Foo CreateWithProperty(int id, string property, string value)
{
if (String.IsNullOrEmpty(property) || !_propertySetters.ContainsKey(property))
throw new ArgumentException("property");
var instance = new Foo { Id = id };
var setter = _propertySetters[property];
setter(instance, value);
return instance;
}
}
. При таком подходе вы даже можете изменять имена свойств, сохраняя значения конфигурации одинаковыми.В зависимости от ситуации это может быть огромным преимуществом.
Сказав это, я чувствую, , что на ваше требование, вероятно, можно было бы лучше ответить с помощью дополнительной контекстной информации и немного другого дизайна.YMMV.