Если у меня есть класс, определенный как это:приведения типа к классу
public class className
{
public object this[string propertyName]
{
get { return this.GetType().GetProperty(propertyName).GetValue(this, null); }
set { this.GetType().GetProperty(propertyName).SetValue(this, value, null); }
}
public string Foo{ get; set; }
public string Bar { get; set; }
Я могу, конечно, набор и получить значения, как это:
className d = new className();
d["Foo"]="abcd" // set
string s = (string)f["Bar"];
(благодаря Eduardo Cuomo для его ответить here)
Но что я действительно хотел сделать что-то вроде:
Type target = Type.GetType(DocumentType);
// loop through list of key-value pairs and populate the data class defined in target object Type
foreach (Dictionary<string, string> PQList in LPQReq)
{
foreach (KeyValuePair<string, string> kvp in PQList)
{
// populate the member in the data class with the value from the MQ String
target[kvp.Key] = kvp.Value;
}
но это не компилировалось как Cannot apply indexing with [] to an expression of type 'System.Type'
так как я мог это сделать?
Конечно, я могу использовать dynamic
, но, возможно, есть способ применить мой тип к моему целевому классу?
'target' - это класс; что такое * экземпляр * этого класса, на котором вы хотели бы установить все эти свойства? – dasblinkenlight
@dasblinkenlight: Ну, у меня более дюжины классов данных, поэтому я создаю тип, основанный на определении, указанном в строке 'DocumentType'. Это означает, что я могу заполнить все классы в целом, не указывая свойства и элементы ... –
Получаете ли вы тип или нет, у вас нет экземпляра этого объекта. Даже вам это удастся, вы получите, что объект не настроен на ссылку объекта –