How to assign a string to an integer field via reflection

c#

Solution

You can use `Convert.ChangeType`

if (idFieldInfo != null)
{
     var type = idFieldInfo.PropertyType;
     idFieldInfo.SetValue(entity, Convert.ChangeType(id, type), null);
}

Problem

So this is the code which makes me sad : ``` private static void AssignId(object entity, string id) { var idFieldInfo = entity.GetType().GetProperties().SingleOrDefault(it => it.GetCustomAttributes(typeof(KeyAttribute), false).Any()); if (idFieldInfo != null) { var type = idFieldInfo.PropertyType; if (type == typeof(byte)) { idFieldInfo.SetValue(entity, Convert.ToByte(id), null); } else if (type == typeof(short)) { idFieldInfo.SetValue(entity, Convert.ToInt16(id), null); } else if (type == typeof(int)) { idFieldInfo.SetValue(entity, Convert.ToInt32(id), null); } else if (type == typeof(long)) { idFieldInfo.SetValue(entity, Convert.ToInt64(id), null); } else if (type == typeof(sbyte)) { idFieldInfo.SetValue(entity, Convert.ToSByte(id), null); } else if (type == typeof(ushort)) { idFieldInfo.SetValue(entity, Convert.ToUInt16(id), null); } else if (type == typeof(uint)) { idFieldInfo.SetValue(entity, Convert.ToUInt32(id), null); } else if (type == typeof(ulong)) { idFieldInfo.SetValue(entity, Convert.ToUInt64(id), null); } } } ``` Is there a smarter way to assign a string value corresponding integer

Original source

Related problems