C # obtener y establecer propiedad por nombre de variable

¿Hay alguna manera de hacer esto? Intento probar si existe una propiedad de un objeto y, si existe, quiero establecer un valor para él. (Tal vez la idea completa sea mala, si es verdadera, ¿por qué?)

class Info
{
    public string X1{ set; get; }
    public string X2{ set; get; }
    public string X3{ set; get; }
}

Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("X1","blah1");
values.Add("X2","blah2");
values.Add("NotThere","blah3");

Info info = new Info();

foreach (var item in values)
{
  string propertyName = item.Key;
  string value = item.Value;
  if (info.GetType().GetProperty(propertyName) != null)  //this probably works
  {
        info.propertyName = value; //this doesn't, how to set it?
  }
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta