可以将 Lambdas 或 Func 放在字符串插值语句中吗
Can one place Lambdas or Func's in String Interpolation statements
考虑以下因素;
public override string ToString()
{
return $"{HouseName}{StreetLine1 + " : "}{StreetLine2}{PostalTown + " : "}:{PostCode + " : "}{Country}";
}
这只不过是对 ToString() 的简单覆盖,以便为应用程序中的最终用户提供比他们在没有提供覆盖的情况下获得的更多关于地址实体的更有意义的信息。
HouseName、StreetLine2 和 Country 在后端数据库上都是允许的空值。我想知道是否有一种方法可以通过实际字符串插值语句本身中的 Lambda 或 func 来执行此操作,而不是编写单独的方法来确定这些值然后 return 什么都没有或值 +“:” .
我仍在学习使用 C# 的方法,到目前为止我所做的搜索似乎表明即使使用神奇的 Elvis 运算符,这也可能是不可能的。然而,同样有可能我只是误解了我一直在阅读的内容。
编辑
根据@Evk 的回答,我创建了以下快速控制台应用程序。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var adr = new Address { StreetLine1 = "1 Any Road", PostalTown = "Any Town", PostCode = "AB12 3CD" };
Console.WriteLine($"{(adr.HouseName != null ? " : " + adr.HouseName : "")} : {adr.StreetLine1 } : { (adr.StreetLine2 != null ? " : " + adr.StreetLine2 : "")} : {adr.PostalTown} : {adr.PostCode} ");
Console.ReadLine();
}
}
public class Address
{
public string HouseName { get; set; }
public string StreetLine1 { get; set; }
public string StreetLine2 { get; set; }
public string PostalTown { get; set; }
public string PostCode { get; set; }
public string Country { get; set; }
}
}
这产生了以下结果
: 1 Any Road : : Any Town : AB12 3CD
其实我是追求
1 Any Road : Any Town : AB12 3CD
如您所见,我什至没有考虑 Country ,如果设置了它应该会产生;
1 Any Road : Any Town : AB12 3CD : Any Country
if rather than writing separate methods to determine the value of
these and then return either nothing or the value + " : " there is a
way to do this within the actual string interpolation statement itself
您可以使用“?:”运算符,只需将其括在“()”中即可:
$"{StreetLine1 + (StreetLine2 != null ? " : " + StreetLine2 : "")}";
但是,如果您只需要将一堆字符串连接在一起 - 使用 String.Join
:
String.Join(" : ", new[] {HouseName, StreetLine1, StreetLine2}.Where(c => c != null));
考虑以下因素;
public override string ToString()
{
return $"{HouseName}{StreetLine1 + " : "}{StreetLine2}{PostalTown + " : "}:{PostCode + " : "}{Country}";
}
这只不过是对 ToString() 的简单覆盖,以便为应用程序中的最终用户提供比他们在没有提供覆盖的情况下获得的更多关于地址实体的更有意义的信息。
HouseName、StreetLine2 和 Country 在后端数据库上都是允许的空值。我想知道是否有一种方法可以通过实际字符串插值语句本身中的 Lambda 或 func 来执行此操作,而不是编写单独的方法来确定这些值然后 return 什么都没有或值 +“:” .
我仍在学习使用 C# 的方法,到目前为止我所做的搜索似乎表明即使使用神奇的 Elvis 运算符,这也可能是不可能的。然而,同样有可能我只是误解了我一直在阅读的内容。
编辑
根据@Evk 的回答,我创建了以下快速控制台应用程序。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var adr = new Address { StreetLine1 = "1 Any Road", PostalTown = "Any Town", PostCode = "AB12 3CD" };
Console.WriteLine($"{(adr.HouseName != null ? " : " + adr.HouseName : "")} : {adr.StreetLine1 } : { (adr.StreetLine2 != null ? " : " + adr.StreetLine2 : "")} : {adr.PostalTown} : {adr.PostCode} ");
Console.ReadLine();
}
}
public class Address
{
public string HouseName { get; set; }
public string StreetLine1 { get; set; }
public string StreetLine2 { get; set; }
public string PostalTown { get; set; }
public string PostCode { get; set; }
public string Country { get; set; }
}
}
这产生了以下结果
: 1 Any Road : : Any Town : AB12 3CD
其实我是追求
1 Any Road : Any Town : AB12 3CD
如您所见,我什至没有考虑 Country ,如果设置了它应该会产生;
1 Any Road : Any Town : AB12 3CD : Any Country
if rather than writing separate methods to determine the value of these and then return either nothing or the value + " : " there is a way to do this within the actual string interpolation statement itself
您可以使用“?:”运算符,只需将其括在“()”中即可:
$"{StreetLine1 + (StreetLine2 != null ? " : " + StreetLine2 : "")}";
但是,如果您只需要将一堆字符串连接在一起 - 使用 String.Join
:
String.Join(" : ", new[] {HouseName, StreetLine1, StreetLine2}.Where(c => c != null));