将字符串值包装到对象属性

时间:2017-01-25 03:05:37

标签: c# string dictionary properties mapping

拥有以下代码块,是否有一种优雅的方式来包装它们以减少代码冗余,例如重复String.IsNullOrWhiteSpace和检查" 1" " 0" 用于映射布尔字段。是否可以先将它们放在字典中,然后再编写一个方法将字典映射到model属性。这样的事情:Mapping object to dictionary and vice versa 但问题是model的不同属性具有不同的数据类型

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

1 个答案:

答案 0 :(得分:0)

您可以编写一些扩展方法来为您包装,例如:

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

然后你可以从任何字符串中调用它们:

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

var i = "Hi ";
string j = i.GetTrimmedValue();