1 Cách chung để truy cập các thuộc tính lớp

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đã cố đọc giá trị từ bảng excel, ánh xạ nó vào dataTable và sau đó ánh xạ giá trị đến lớp của nó trong C # bằng phản xạ. Không có vấn đề gì cho việc này

Tôi có hai lớp - một lớp cung cấp dữ liệu thử nghiệm và một lớp khác cung cấp logic để đọc tệp có chiều rộng cố định.

Khi hai lớp có nhiều thuộc tính hơn, cách tôi truy cập vào các thuộc tính của nó bằng cách nào đó trùng lặp.

Đây là lớp 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

Đây là lớp để truy cập tệp có chiều rộng cố định


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

Khi TestData và In chuẩnField có nhiều thuộc tính hơn, mã để gọi chúng trở thành một mớ hỗn độn trùng lặp lớn. Có cách nào để giảm mã vì tên thuộc tính giống nhau không?

Đây là những gì tôi phải làm cho mỗi một tài sản.

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

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

Có cách nào để giảm 2 nếu có điều kiện, thành 1 khối mã bằng cách thực hiện vòng lặp foreach không? Tôi chỉ không biết làm thế nào để gọi các thuộc tính một cách chung chung. có thể làm một cái gì đó như thế này trong c #

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

    
0
  1. Hãy xem AutoMapper , nó có thể tự động sao chép các thuộc tính từ lớp này sang lớp khác.
    2019-05-08 16: 31: 59Z
  2. Từ ngữ cảnh Tôi giả sử rằng đây là một lỗi đánh máy: ModifyFixedWidthFile(_testData.Address, _field.Name.Address, _field.Name.Address). Bạn có ý định lặp lại Address?
    2019-05-08 19: 49: 17Z
  3. @ ScottHannen Xin lỗi, tôi đã sửa bản đồ, bạn đã đúng.
    2019-05-08 20: 47: 19Z
1 Câu trả lời                              1                         

Tên của tôi cho các phương thức và đối số đều gần như vô dụng ở đây.

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);
}

Điều này chỉ phá vỡ nó thành hai chức năng. Phương pháp bên ngoài chọn một thuộc tính string từ testData và chọn một thuộc tính FieldPosition từ fields. Đó là những phần duy nhất đang thay đổi. Sau đó, nó gọi phương thức ModifySomething bên trong, hoạt động trên các giá trị đó.

    
0
2019-05-08 21: 35: 11Z
  1. Cảm ơn, tôi đã thử và nó dường như dễ đọc hơn đối với tôi. Vẫn còn một chút lộn xộn nhưng thật tốt.
    2019-05-08 22: 22: 51Z
nguồn đặt đây