0

Having following blocks of code, is there an elegant way to wrap them up to reduce redundancy of codes, such as the repeating String.IsNullOrWhiteSpace and the checking of "1" or "0" for mapping of the boolean field. Is it possible to put them inside a dictionary first and first and write a method to map the dictionary to the model properties. Something like this: Mapping object to dictionary and vice versa but the problem is different property of model is having different datatype

 string[] stringValue = data.Split(',');
 model.Field1 = String.IsNullOrWhiteSpace(stringValue[4].Trim()) ? 0 : int.Parse(stringValue[4].Trim());
 model.Field2 = !String.IsNullOrWhiteSpace(stringValue[5].Trim()) && (stringValue[5].Trim() == "1");
 model.Field3 = String.IsNullOrWhiteSpace(stringValue[6].Trim()) ? null : stringValue[6].Trim();
 model.Field4 = String.IsNullOrWhiteSpace(stringValue[7].Trim()) ? 0 : int.Parse(stringValue[7].Trim());
 model.Field5 = String.IsNullOrWhiteSpace(stringValue[8].Trim()) ? 0 : int.Parse(stringValue[8].Trim());
 model.Field6 = String.IsNullOrWhiteSpace(stringValue[9].Trim()) ? 0 : int.Parse(stringValue[9].Trim());
 model.Field7 = String.IsNullOrWhiteSpace(stringValue[10].Trim()) ? 0 : int.Parse(stringValue[10].Trim());
 model.Field8 = String.IsNullOrWhiteSpace(stringValue[11].Trim()) ? 0 : int.Parse(stringValue[11].Trim());
 model.Field9 = String.IsNullOrWhiteSpace(stringValue[12].Trim()) ? 0 : int.Parse(stringValue[12].Trim());
 model.Field10 = String.IsNullOrWhiteSpace(stringValue[13].Trim()) ? 0 : int.Parse(stringValue[13].Trim());
 model.Field11 = String.IsNullOrWhiteSpace(stringValue[14].Trim()) ? null : stringValue[14].Trim();
 model.Field12 = String.IsNullOrWhiteSpace(stringValue[15].Trim()) ? null : stringValue[15].Trim();
 model.Field13 = String.IsNullOrWhiteSpace(stringValue[16].Trim()) ? 0 : double.Parse(stringValue[16].Trim());
 model.Field14 = String.IsNullOrWhiteSpace(stringValue[17].Trim()) ? 0 : int.Parse(stringValue[17].Trim());
 model.Field15 = String.IsNullOrWhiteSpace(stringValue[18].Trim()) ? 0 : double.Parse(stringValue[18].Trim());
 model.Field16 = String.IsNullOrWhiteSpace(stringValue[19].Trim()) ? 0 : double.Parse(stringValue[19].Trim());
 model.Field17 = String.IsNullOrWhiteSpace(stringValue[20].Trim()) ? null : stringValue[20].Trim();
 model.Field18 = String.IsNullOrWhiteSpace(stringValue[21].Trim()) ? 0 : double.Parse(stringValue[21].Trim());
 model.Field19 = String.IsNullOrWhiteSpace(stringValue[22].Trim()) ? 0 : double.Parse(stringValue[22].Trim());
Community
  • 1
  • 1
Z.V
  • 1,441
  • 3
  • 21
  • 35

1 Answers1

0

You could write some extension methods to wrap things for you, for example:

static class Extensions
{
    public static int GetIntValue(this string orig)
    {
        var trimmed = orig?.GetTrimmedValue();
        return trimmed == null ? 0 : int.Parse(trimmed);
    }

    public static string GetTrimmedValue(this string orig)
    {
        var trimmed = orig?.Trim();
        return string.IsNullOrEmpty(trimmed) ? null : trimmed;
    }
}

Then you can call them from any string:

var x = "1 ";
int y = x.GetIntValue();

var i = "Hi ";
string j = i.GetTrimmedValue();
John Koerner
  • 37,428
  • 8
  • 84
  • 134