子串插值
Substring interpolation
是否可以对字符串的子字符串进行字符串插值格式化?
我一直在搜索有关字符串插值的 Microsoft 文档,但无法完成工作示例。 reference.
目前我有:
var description = "the quick brown fox";
var result = $"{description.Substring(0, description.Length < 10 ? description.Length : 10)} jumps..",
使用字符串插值我最想使用:
var description = "the quick brown fox";
var result = $"{description:10} jumps..",
已编辑
我希望结果的输出是:
The quick jumps..
可以使用取方法:
description.Take(10)
不幸的是,此方法 returns IEnumerable 无法直接转换为字符串(ToString 方法在 IEnumerable 上使用时通常会 return 类型名称)。
您不能使用它创建字符串,因为字符串构造函数需要字符数组,所以最简单的解决方案是:
new string(description.Take(10).ToArray())
不过,这样的代码如果你想多次使用它会更难阅读,所以你可以创建扩展方法:
public static string TakeFirst(this string text, int number)
{
if (text == null)
return null;
return new string(text.Take(number).ToArray());
}
那你就可以直接用了:
$"{description.TakeFirst(10)} jumps..";
编辑:如评论中所述,由于每次调用此方法时都会分配数组,因此可能会出现严重的性能问题。您可以通过使用 Substring 而不是 Take(x).ToArray() 解决方案实现 TakeFirst 方法来避免它们。
问题是:
"Is it possible to do a string interpolation formatting a substring of a string?"
以这样的方式:
var result = $"{description:10} jumps..",
@JohnSkeet 和@JeroenMostert 给出的答案最准确:
"No, it is not possible."
有多种方法可以简化调用。感谢@PiotrWojsa 指出这一点。然而,这不涉及插值部分..
您可以使用 ranges (C# 8):
var description = "the quick brown fox";
var result = $"{description[..10]} jumps..";
是否可以对字符串的子字符串进行字符串插值格式化?
我一直在搜索有关字符串插值的 Microsoft 文档,但无法完成工作示例。 reference.
目前我有:
var description = "the quick brown fox";
var result = $"{description.Substring(0, description.Length < 10 ? description.Length : 10)} jumps..",
使用字符串插值我最想使用:
var description = "the quick brown fox";
var result = $"{description:10} jumps..",
已编辑
我希望结果的输出是:
The quick jumps..
可以使用取方法:
description.Take(10)
不幸的是,此方法 returns IEnumerable 无法直接转换为字符串(ToString 方法在 IEnumerable 上使用时通常会 return 类型名称)。 您不能使用它创建字符串,因为字符串构造函数需要字符数组,所以最简单的解决方案是:
new string(description.Take(10).ToArray())
不过,这样的代码如果你想多次使用它会更难阅读,所以你可以创建扩展方法:
public static string TakeFirst(this string text, int number)
{
if (text == null)
return null;
return new string(text.Take(number).ToArray());
}
那你就可以直接用了:
$"{description.TakeFirst(10)} jumps..";
编辑:如评论中所述,由于每次调用此方法时都会分配数组,因此可能会出现严重的性能问题。您可以通过使用 Substring 而不是 Take(x).ToArray() 解决方案实现 TakeFirst 方法来避免它们。
问题是:
"Is it possible to do a string interpolation formatting a substring of a string?"
以这样的方式:
var result = $"{description:10} jumps..",
@JohnSkeet 和@JeroenMostert 给出的答案最准确:
"No, it is not possible."
有多种方法可以简化调用。感谢@PiotrWojsa 指出这一点。然而,这不涉及插值部分..
您可以使用 ranges (C# 8):
var description = "the quick brown fox";
var result = $"{description[..10]} jumps..";