C # myclass. [(Col.ColumnName)] = строка [(col.ColumnName)] говорит, что ожидаемый идентификатор? - PullRequest
0 голосов
/ 15 ноября 2011

Следующий код дает красный волнистый знак под "emp. (Col.ColummnName)".Ошибка: « ожидаемый идентификатор »

foreach (DataColumn col in dt.Columns)
{
   emp.(col.ColumnName) = row[(col.ColumnName)];
}

emp - пользовательский класс с именами свойств, которые соответствуют именам столбцов в dataTable dt .

Я подозреваю, что мне нужно создать выражение по-другому, чтобы я мог ссылаться на свойство класса emp с результатами вызова метода (col.ColumnName).

Будут оценены любые идеи.

=========================

Окончательный ответ с рабочим кодом функции;

public void rowToObject(ref DataRow dr, ref object myObj)
{
    foreach (DataColumn dc in dr.Table.Columns)
    {
        string colName = dc.ColumnName;
        object colValue = dr[colName];

        if (object.ReferenceEquals(colValue, DBNull.Value))
        {
            colValue = null;
        }

        PropertyInfo pi = myObj.GetType().GetProperty(colName);
        if (pi != null && colValue != null)
        {
            Type propType = null;
            Type nullableType = Nullable.GetUnderlyingType(pi.PropertyType);

            if (nullableType != null)
            {
                propType = nullableType;
            }
            else
            {
                propType = pi.PropertyType;
            }

            if (object.ReferenceEquals(propType, colValue.GetType()))
            {
                pi.SetValue(myObj, colValue, null);
            }
        }
    }
}

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

Этот синтаксис не поддерживается, имя свойства должно быть известно во время компиляции. Вместо этого вы можете использовать отражение:

foreach (DataColumn col in dt.Columns)
{
   PropertyInfo prop = emp.GetType().GetProperty(col.ColumnName);
   prop.SetValue(emp, row[col.ColumnName], null);
}
1 голос
/ 15 ноября 2011

Этот динамический доступ к свойствам класса действительно полезен, но реализовать его не так просто, как вы ожидаете.

Вам нужно изучить Reflection ... с помощью этой библиотеки вы можете динамически создавать и заполнять свои классы, но это требует некоторого чтения и проб / ошибок.

Вот пара ссылок, которые обсуждают вашу ситуацию; тем не менее, вы можете сначала поискать учебник Reflection 101.:

.

.

Пожалуйста, проголосуйте, если будете полезны

0 голосов
/ 15 ноября 2011

Я не знаю, что вы можете сделать это так, как вы пытаетесь это сделать.Что вы ищете, так это отражение, и вы можете найти пример того, как он работает в этом посте:

Как просмотреть все свойства класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...