访问类属性的通用方法

时间:2019-05-08 15:59:20

标签: c# oop

我一直试图从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)
}

是否通过执行foreach循环将2个if条件减少为1个代码块?我只是不知道如何以通用方式调用属性。是否可以在c#

中执行类似的操作
if (_testData.[something generic]!= "")
{
    ModifyFixedWidthFile(_testData.[something generic], _field.[something generic].PosStart, _field.[something generic].PosEnd)
}

1 个答案:

答案 0 :(得分:0)

我的方法和参数名称在这里几乎都没用。

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方法。