Я нашел много примеров, которые ПОЧТИ говорят мне, что мне нужно знать. Но пока все предполагает, что у меня уже есть экземпляр свойства, для которого я хочу установить значение. Но у меня нет экземпляра. У меня есть объект PropertyInfo. Я могу динамически получить имя свойства, но для вызова SetValue () я должен иметь экземпляр свойства для передачи в метод. Как получить экземпляр свойства, значение которого мне нужно установить? Вот мой код с ??? где экземпляр имущества должен быть предоставлен. Как получить экземпляр свойства, а не только объект PropertyInfo?
(Причина, по которой я пишу этот метод, заключается в том, что я не могу гарантировать, какие столбцы будут возвращать различные хранимые процедуры.)
protected new void MapDbResultToFields(DataRow row, DataColumnCollection columns)
{
Console.WriteLine("Entered Clinician.MapDbResultToFields");
var properties = this.GetType().GetProperties();
Console.WriteLine("Properties Count: " + properties.Length);
foreach (DataColumn col in columns)
{
Console.WriteLine("ColumnName: " + col.ColumnName);
}
foreach (var property in properties)
{
string propName = property.Name.ToLower();
Console.WriteLine("Property name: " + propName);
Console.WriteLine("Index of column name: " + columns.IndexOf(propName));
Console.WriteLine("column name exists: " + columns.Contains(propName));
if (columns.Contains(propName))
{
Console.WriteLine("PropertyType is: " + property.PropertyType);
switch (property.PropertyType.ToString())
{
case "System.String":
String val = row[propName].ToString();
Console.WriteLine("RowColumn Value (String): " + val);
property.SetValue(???, val, null);
break;
case "System.Nullable`1[System.Int64]":
case "System.Int64":
Int64.TryParse(row[propName].ToString(), out var id);
Console.WriteLine("RowColumn Value (Int64): " + id);
property.SetValue(???, id, null);
break;
case "System.Boolean":
Boolean.TryParse(row[propName].ToString(), out var flag);
Console.WriteLine("RowColumn Value (Boolean): " + flag);
property.SetValue(???, flag, null);
break;
}
}
else
{
Console.WriteLine("Property name not found in columns list");
}
}
}