2013-08-13 5 views
2

Я использую библиотеку FileHelpers для записи выходных файлов. Вот пример фрагмента кода:Как получить назначенную фиксированную длину поля из библиотеки FileHelpers?

public class MyFileLayout 
{ 
    [FieldFixedLength(2)] 
    private string prefix; 

    [FieldFixedLength(12)] 
    private string customerName; 
} 

В моем коде потока, я хотел бы знать, каждое из этих полей, назначенных длины во время выполнения, например, для: это 12 для CUSTOMERNAME.

Есть ли способ получить значения, как указано выше, из библиотеки FileHelpers?

+0

Вы хотите получить значения атрибутов? – Matten

+0

Да, но это специфично для библиотеки FileHelpers, я уже разместил вопрос о получении значения атрибута, [http://stackoverflow.com/questions/18201971/how-do-i-get-the-custom-attribute-value -of-a-field /] (http://stackoverflow.com/questions/18201971/how-do-i-get-the-custom-attribute-value-of-a-field/) – vijay

ответ

1

Я не думаю, что вам нужна библиотека, чтобы прочитать свойства FieldAttribute.

 public class MyFileLayout 
     { 
      [FieldFixedLength(2)] 
      public string prefix; 

      [FieldFixedLength(12)] 
      public string customerName; 
     } 




     Type type = typeof(MyFileLayout); 
     FieldInfo fieldInfo = type.GetField("prefix"); 
     object[] attributes = fieldInfo.GetCustomAttributes(false); 

     FieldFixedLengthAttribute attribute = (FieldFixedLengthAttribute)attributes.FirstOrDefault(item => item is FieldFixedLengthAttribute); 

     if (attribute != null) 
     { 
      // read info 
     } 

Я сделал метод для этого:

public bool TryGetFieldLength(Type type, string fieldName, out int length) 
    { 
     length = 0; 

     FieldInfo fieldInfo = type.GetField(fieldName); 

     if (fieldInfo == null) 
      return false; 

     object[] attributes = fieldInfo.GetCustomAttributes(false); 

     FieldFixedLengthAttribute attribute = (FieldFixedLengthAttribute)attributes.FirstOrDefault(item => item is FieldFixedLengthAttribute); 

     if (attribute == null) 
      return false; 

     length = attribute.Length; 
     return true; 
    } 

Использование:

 int length; 
     if (TryGetFieldLength(typeof(MyFileLayout), "prefix", out length)) 
     { 
      Show(length); 
     } 

PS: поля/свойства должны быть открытыми для того, чтобы читать их атрибуты с отражением.

+0

Я специально отметил это FileHelpers, Получение значения атрибута будет работать, кроме как в FileHelpers свойство Length декалируется как внутреннее, поэтому я не могу использовать этот способ. пожалуйста, напишите мой предыдущий вопрос [http://stackoverflow.com/questions/18201971/how-do-i-get-the-custom-attribute-value-of-a-field/] (http://stackoverflow.com/ вопросы/18201971/как-делать-я-получить по-настраиваемого-атрибут-значение в своем поле /) – vijay

Смежные вопросы