Общий способ доступа к свойствам класса - PullRequest
0 голосов
/ 08 мая 2019

Я пытался прочитать значение из листа Excel, отобразить его в dataTable, а затем отобразить значение в его класс в C #, используя отражение. Нет проблем для этого

У меня есть два класса - один предоставляет тестовые данные, а другой - логику для чтения файла фиксированной ширины.

Когда два класса имеют больше свойств, способ доступа к его свойствам несколько дублируется.

Вот класс TestData

class TestData
{
     public string TestName { get; set; }
     public string Name{ get; set; }
     public string Address{ get; set; }
}

//ignoring the whole logic in the middle, i can access the value of the test by
_testData.Name or _testData.Address

Вот класс для доступа к файлу с фиксированной шириной


class FieldPosition
{
     public string FieldName { get; set; }
     public string PosStart{ get; set; }
     public string PosEnd{ get; set; }
}

class IncomingFields
{
     public FieldPosition Name => GetValue("Name");
     public FieldPosition Address=> GetValue("Address");
}
//ignoring the whole logic in the middle, i can access the value of the field position by
_field.Name.PosStart or _field.Name.PosEnd

Когда у TestData и IncomingFields есть больше свойств, код для их вызова становится большим дублирующим беспорядком. Есть ли способ уменьшить код, поскольку имя свойства совпадает?

Вот что мне нужно сделать для одного свойства.

if (_testData.Name != "")
{
    ModifyFixedWidthFile(_testData.Name, _field.Name.PosStart, _field.Name.PosEnd)
}

if (_testData.Address!= "")
{
    ModifyFixedWidthFile(_testData.Address, _field.Address.PosStart, _field.Address.PosEnd)
}

Есть ли в любом случае, чтобы сократить 2 условия, в 1 блок кода, выполняя цикл foreach? Я просто не знаю, как назвать свойства в общем виде. Можно ли сделать что-то подобное в C #

if (_testData.[something generic]!= "")
{
    ModifyFixedWidthFile(_testData.[something generic], _field.[something generic].PosStart, _field.[something generic].PosEnd)
}

1 Ответ

0 голосов
/ 09 мая 2019

Мои имена для методов и аргументов здесь почти бесполезны.

void OuterMethod(TestData testData, IncomingFields fields)
{
    ModifySomething(testData.Address, fields.Address);
    ModifySomething(testData.Name, fields.Name);
}

void ModifySomething(string value, FieldPosition fieldPosition)
{
    if (value != "")
        ModifyFixedWithFile(value, fieldPosition.PosStart, fieldPosition.PosEnd);
}

Это просто разбивает его на две функции.Внешний метод выбирает свойство string из testData и выбирает свойство FieldPosition из fields.Это единственные части, которые меняются.Затем он вызывает внутренний метод ModifySomething, который воздействует на эти значения.

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