112

我想在 C# 中执行以下操作(来自 Python 背景):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

如何将字符串内的标记替换为字符串外的值?

4

15 回答 15

278

这已从 C# 6.0 (Visual Studio 2015+) 开始添加。

例子:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

这是语法糖:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

其他资源:

C# (v2) 的字符串插值讨论

C# 6.0 语言预览

于 2014-11-17T17:01:46.827 回答
85
string mystr = string.Format("This is {0}overflow", strVar);

您还可以使用命名参数而不是索引。

于 2012-02-19T23:00:34.670 回答
14

您可以使用string.Format将值放入字符串中:

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

另一种方法是使用 C# 连接运算符:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

如果您要进行大量连接,请使用StringBuilder更有效的类:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();
于 2012-02-19T23:10:00.283 回答
12

如果您当前使用带有 C# 6.0 的 Visual Studio 2015,请尝试以下操作:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

该功能称为字符串插值。

于 2015-01-19T01:36:22.293 回答
11

C# 6.0

string mystr = $"This is {strVar}overflow";
于 2016-03-03T16:44:46.073 回答
6

没有运营商。你需要使用string.Format.

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

不幸string.Format的是,它是一个静态方法,所以你不能简单地编写"This is {0}soverflow".Format(strVar). 有些人已经定义了一个扩展方法,它允许这种语法。

于 2012-02-19T22:59:55.583 回答
5

使用string.Format

string mystr = string.Format("This is {0}overflow", "stack");
于 2012-02-19T23:00:55.893 回答
4

你应该使用String.Format(). 语法有点不同,而是使用数字占位符。

例子:

String.Format("item {0}, item {1}", "one", "two")

查看http://msdn.microsoft.com/en-us/library/system.string.format.aspx了解更多详情。

于 2012-02-19T23:02:42.070 回答
1

您有 2 个选项。您可以使用 String.Format 也可以使用连接运算符。

String newString = String.Format("I inserted this string {0} into this one", oldstring);

或者

String newString = "I inserted this string " + oldstring + " into this one";
于 2012-02-19T23:04:12.883 回答
0

您可以使用 Expansive 完成此操作:https ://github.com/anderly/Expansive

于 2014-02-18T09:42:01.140 回答
0

利用:

strVar = "stack"
mystr  = String.Format("This is {0}", strVar);
于 2012-02-19T23:01:56.267 回答
0

还有另一种使用 string.Replace 实现占位符的方法,奇怪的是在某些情况下会有所帮助:

mystr = mystr.Replace("%soverflow", strVar);
于 2017-04-13T10:01:58.577 回答
0

您可以使用以下方式

字符串插值

$ 特殊字符将字符串文字标识为内插字符串。例如

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

内插字符串是可能包含内插表达式的字符串文字。当内插字符串解析为结果字符串时,具有内插表达式的项目将替换为表达式结果的字符串表示形式。

字符串格式

如果您需要将对象、变量或表达式的值插入另一个字符串,请使用 String.Format。例如

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
于 2019-04-15T13:06:03.153 回答
0

基本示例

        var name = "Vikas";
        Console.WriteLine($"My name is {name}");

添加特殊字符

string name = "John";
Console.WriteLine($"Hello, \"are you {name}?\", but not the terminator movie one :-{{");
//output-Hello, "are you John?", but not the terminator movie one :-{

不仅仅是用值替换令牌,您还可以在 C# 中使用字符串插值做更多事情

评估表达式

Console.WriteLine($"The greater one is: { Math.Max(10, 20) }");
//output - The greater one is: 20

方法调用

    static void Main(string[] args)
    {
        Console.WriteLine($"The 5*5  is {MultipleByItSelf(5)}");
    }
  
    static int MultipleByItSelf(int num)
    {           
        return num * num;
    }

资料来源:C# 中的字符串插值和示例

于 2020-09-04T14:28:36.927 回答
-1

您可以使用美元符号和大括号。

Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");

请参阅此处的文档。

于 2020-09-15T07:42:24.747 回答