在字符串中使用变量

本文关键字:变量 字符串 | 更新日期: 2023-09-27 18:06:49

在PHP中我可以这样做:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

在c#中是否有类似的语言结构?

我知道有String.Format();,但我想知道它是否可以不调用字符串上的函数/方法。

在字符串中使用变量

在c# 6中可以使用字符串插值:

string name = "John";
string result = $"Hello {name}";

Visual Studio中的语法高亮显示使其具有很高的可读性,并且检查了所有标记。

此功能不是c# 5或以下版本的内置功能。
更新:c# 6现在支持字符串插值,参见更新的答案

推荐的方法是使用String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

然而,我写了一个名为SmartFormat的小型开源库,它扩展了String.Format,以便它可以使用命名占位符(通过反射)。你可以这样写:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

希望你喜欢!

使用以下方法

1:方法一

var count = 123;
var message = $"Rows count is: {count}";

2:方法二

var count = 123;
var message = "Rows count is:" + count;

3:方法三

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4:方法四

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5:方法五

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

直到c# 5 (-VS2013),你必须为它调用函数/方法。一个"正常"的函数,如String.Format或+操作符的重载。

string str = "Hello " + name; // This calls an overload of operator +.

在c# 6 (VS2015)中引入了字符串插值(由其他答案描述)。

我看到了这个问题和类似的问题,我更喜欢使用内置方法来解决使用值字典来填充模板字符串中的占位符的问题。这是我的解决方案,它是建立在这个线程的StringFormatter类上的:

    public static void ThrowErrorCodeWithPredefinedMessage(Enums.ErrorCode errorCode, Dictionary<string, object> values)
    {
        var str = new StringFormatter(MSG.UserErrorMessages[errorCode]) { Parameters = values};
        var applicationException = new ApplicationException($"{errorCode}", new ApplicationException($"{str.ToString().Replace("@","")}"));
        throw applicationException;
    }

,其中消息存在于字典中,而该字典不在调用者中,但调用者只能访问enum。ErrorCode,并且可以构建一个参数数组并将其作为参数发送给上述方法。

假设我们有MSG的值。UserErrorMessages[errorCode]原来是

"The following entry exists in the dump but is not found in @FileName: @entryDumpValue"

调用的结果

 var messageDictionary = new Dictionary<string, object> {
                    { "FileName", sampleEntity.sourceFile.FileName}, {"entryDumpValue", entryDumpValue }
                };
                ThrowErrorCodeWithPredefinedMessage(Enums.ErrorCode.MissingRefFileEntry, messageDictionary);

The following entry exists in the dump but is not found in cellIdRules.ref: CellBand = L09

这种方法的唯一限制是避免在任何传递的值的内容中使用'@'。

你可以像这样在c#中定义一个字符串

var varName= data.Values["some var"] as string;