我可以将函数放在插值字符串中,如果是这样的话

时间:2018-04-27 15:30:10

标签: c#

请考虑以下代码段;

 foreach (var row in VtlDxGrid.GetSelectedRowHandles())
        {
            string name = Convert.ToString(VtlDxGrid.GetCellValue(row, "ContactName"));
            string hn = Convert.ToString(VtlDxGrid.GetCellValue(row, "HouseName"));
            string street1 = Convert.ToString(VtlDxGrid.GetCellValue(row, "StreetLine1"));
            string street2 = Convert.ToString(VtlDxGrid.GetCellValue(row, "StreetLine2"));
            string pt = Convert.ToString(VtlDxGrid.GetCellValue(row, "PostalTown"));
            string pc = Convert.ToString(VtlDxGrid.GetCellValue(row, "PostCode"));
            string country = Convert.ToString(VtlDxGrid.GetCellValue(row, "Country"));

            SelectedAddress = $"{name} {hn ?? ":"} : {street1} : {street2 ?? ":"}  {pt} : {pc} : {country}";
        }

HouseName,StreetLine2和Country可以包含空值。我需要最终得到一个字符串,其中包含以冒号分隔的值(如果county为null,则末尾没有冒号)。

在我碰巧知道HouseName和StreetLine2为空的情况下,上述工作在一定程度上起作用。但是在这种情况下Country也是null,最后我得到一个冒号。

我可以在插值字符串中放置函数,还是应该从不同的角度来看待它?

修改

在我修改的当前示例中;

Jim's Fish Shop:Harold Road:HASTINGS:TN45 6QR:

我需要考虑这样一个事实:可能为null的所有三个字段可能都不是,并且任何可以想象的null或值的变体最终都会包含一个包含所有具有值分隔的字段的字符串用冒号。

1 个答案:

答案 0 :(得分:1)

我会采取不同的方法。我不是将这些单元格读入单独的变量,而是添加到列表中,然后像这样使用string.Join

List<string> theList = new List<string>();

theList.Add("The name");
theList.Add(null);
theList.Add("stree1 line 1");
theList.Add(null);
theList.Add("postal town");
theList.Add("postal code");
theList.Add(null);

Console.WriteLine(string.Join(":", theList.Where(l => !string.IsNullOrEmpty(l))))

在你的情况下会变得像

List<string> addressInfoList = new List<string>();

addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "ContactName")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "HouseName")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "StreetLine1")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "StreetLine2")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "PostalTown")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "PostCode")));
addressInfoList.Add(Convert.ToString(VtlDxGrid.GetCellValue(row, "Country")));


Console.WriteLine(string.Join(":", addressInfoList.Where(l => !string.IsNullOrEmpty(l))));