我一直试图从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)
}
答案 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
方法。