代码之家  ›  专栏  ›  技术社区  ›  Roee Adler

C#:参数化字符串,仅在“full”参数之间有空格?

  •  2
  • Roee Adler  · 技术社区  · 16 年前

    "Hello {0} {1} {2}" 以第一、中间和最后为参数。但是,如果中间名为空,我不希望名字和姓氏之间有两个空格,而是只需要一个空格。我当然可以用“如果”来做,但有没有更优雅的方法来实现这一点?

    6 回复  |  直到 11 年前
        1
  •  3
  •   Jimmy    16 年前
    string.Format("{0} {1} {2}", first, middle, last).Replace("  "," ")
    
        2
  •  2
  •   cdmckay    16 年前

    也许值得一试 Name 具有 Full 处理该逻辑的属性(即将打印 "John Smith" 如果没有中间名或 "John A. Smith" 如果有的话)。

    那么您的代码将是:

    var name = new Name(first, middle, last);
    var message = string.Format("Hello {0}", name.Full);
    

    LastFirstMiddle 财产(以获得 "Smith, John A." 格式字符串)和任何其他对 班级。

        3
  •  2
  •   VVS    16 年前
    "Hello {0} {1}{3}{2}"
    

    哪里

    {3} = param1.IsNullOrEmpty() ? "" : " "
    
        4
  •  0
  •   JaredPar    16 年前

    实现这一点的一种方法是将空格放入参数字符串中。例如(仅以名字和姓氏为例)

    Console.WriteLine("Hello {0}{1}{2}",
      firstName,
      String.IsNullOrEmpty(firstName) ? String.Empty : " ", 
      lastName);
    
        5
  •  0
  •   Joe Chung    16 年前
    var hello =
        (from name in new[] { "Hello", firstName, middleName, lastName }
         where !string.IsNullOrEmpty(name))
         .Aggregate((xs, x) => xs + " " + x);
    

    var hello = string.Join(" ", 
        (from name in new[] { "Hello", firstName, middleName, lastName }
         where !string.IsNullOrEmpty(name))
         .ToArray());
    
        6
  •  0
  •   reaz    11 年前

    public string LogicFullName(string fName)
        {
            string logicName = String.Empty;
            string[] splitFullName = fName.Trim().Split(' ');
            for (int i = 0; i < splitFullName.Length; i++)
            {
                if (logicName == String.Empty && i == 0)
                {
                    logicName = splitFullName[i].Trim();
                }
                else
                {
                    if (splitFullName[i] != String.Empty)
                        logicName = logicName + " " + splitFullName[i].Trim();
                }
            }
            return logicName;
         }