c# - 将地址对象转换为字符串的最佳方法是什么?

标签 c# string c#-3.0 object

我有一个 Address 对象,它具有属性 AddressLine1、AddressLine2、Suburb、State、ZipCode。 (还有更多,但这对于示例来说已经足够了)。此外,每个属性都是字符串。我正在使用 C# 3.0。

我想将它表示为一个字符串,但当我这样做时,我发现由于所有的 if 语句,我正在创建一个具有高圈复杂度的方法......

假设分配给每个属性的字符串与属性名称相同(即AddressLine1 =“AddressLine1”)...我希望地址表示如下:

“AddressLine1 AddressLine2 郊区州邮政编码”。

现在,我最初的做法是通过一个简单的 String.Format()

String.Format("{0} {1} {2} {3} {4}", address.AddressLine1, 
address.AddressLine2, address.Suburb, address.State, address.ZipCode);

这一切都很好,直到我发现其中一些字段可能为空......特别是 AddressLine2。结果是额外的不需要的空格...当您连续出现多个空格时,这尤其烦人。

为了解决这个问题,也是我能想到的唯一解决方案,我必须手动构建字符串,并且仅在地址属性不为 null 或空时将其添加到字符串中。

string addressAsString = String.Empty;

if (!String.IsNullOrEmpty(address.AddressLine1))
{
    addressAsString += String.Format("{0}", address.AddressLine1);
}

if(!String.IsNullOrEmpty(address.AddressLine2))
{
    addressAsString += String.Format(" {0}", address.AddressLine2);
}

etc....

是否有一种我没有想到的更优雅和/或更简洁的方法来实现这一目标?我的解决方案只是感觉困惑且臃肿......但我想不出更好的方法......

据我所知,考虑到我想做的事情,这是我唯一的选择......但我只是想把它扔在那里,看看比我更有经验的人是否知道更好的方法。如果没有更好的选择,那么好吧......但如果有的话,那么我会学到一些我以前不知道的东西。

提前致谢!

最佳答案

这可能不是最有效的方法,但它很简洁。您可以将所需的项目放入一个数组中,并过滤掉没有重要值的项目,然后将它们连接起来。

var items = new[] { line1, line2, suburb, state, ... };
var values = items.Where(s => !string.IsNullOrEmpty(s));
var addr = string.Join(" ", values.ToArray());

可能更有效,但有点难以阅读,将值聚合到 StringBuilder 中,例如

var items = new[] { line1, line2, suburb, state, ... };
var values = items.Where(s => !string.IsNullOrEmpty(s));
var builder = new StringBuilder(128);
values.Aggregate(builder, (b, s) => b.Append(s).Append(" "));
var addr = builder.ToString(0, builder.Length - 1);

我可能会倾向于第一个实现之类的东西,因为它的代码更简单且更易于维护,然后如果性能是一个问题,请考虑更像第二个实现的东西(如果它确实更快...... )。

(请注意,这需要 C# 3.0,但您没有提及您的语言版本,因此我假设这没问题)。

关于c# - 将地址对象转换为字符串的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600967/

相关文章:

image-processing - 在C#中将图像转换为黑白或棕褐色

c# - 如何获得图像的分辨率? (JPEG、GIF、PNG、JPG)

c# - Silverlight 5 + Internet Explorer 9 在后续 GET 中使用来自 POST 的旧内容类型?

c# - 实例之间是否有共享的东西可以用来存储和共享一些值?

javascript - 用 jQuery 替换正斜杠

c# - 从单词和数字中提取值

c# - 如何为调用基对象中的基方法的方法编写单元测试

c# - DateTime.Now 值因 Android 设备而异

java - 多线程字符串处理因#threads 而爆炸

c# - 在哪里可以找到 C# 3.0 语法?