String怎么样?处理的格式方法

本文关键字:格式 方法 处理 怎么样 String | 更新日期: 2023-09-27 18:07:59

如Microsoft站点所述,字符串。Format将一些字符串变量排列成一个字符串,这是c#中连接字符串的另一种方式。

string.Format("Name = {0} Surname = {1}",name,surname);

我的问题是这是如何工作的?这个方法是一个特殊的方法吗,我可以创建一个类似的方法,在每个{n}只接受一个整数吗?或者该方法是否被编译器以不同的方式解释,如果是,则编译器如何访问该方法。

如果可能的话,我想看看编译器是如何解释这个方法的。

PS:当你可以向一个方法发送尽可能多的参数时,它是如何工作的?

[编辑]这是否意味着,那个字符串。格式采用第一个参数和过滤器进入一个正则表达式或任何工具(分割等)得到哪里{Number}是和地方有一个字符串标记从第二个参数部分?

String怎么样?处理的格式方法

向方法发送可变数量的参数是这样做的:

public static string MyStringFormat(string formatString, params object [] args)
{
}

你现在可以向this传递任意多的参数:

MyStringFormat("{0}{1}",42,"Hello World")
MyStringFormat("{0}{1}{2}",42,"Hello World",999.9)

在方法中,这些参数只是一个数组(在本例中是object)。以下是params关键字的文档。

至于编写自己的方法来接受数字输入,如Format所做的,这将是一种方式(使用正则表达式):

 public static string MyStringFormat(string formatString, params object[] args)
    {
        var regex = new Regex("{([0-9]*)}");
        return regex.Replace(formatString,m =>
                           {
                               int index = int.Parse(m.Groups[1].Value);
                               if(index<args.Length)
                                  return args[index].ToString();
                               return String.Empty;
                           });
    }

实例:http://rextester.com/rundotnet?code=OMZC13551

正常功能。

它解析字符串并在传入参数(如果需要)上调用ToString以构造新的字符串。

在你的例子中重载的签名是:

public static string Format(
    string format,
    params Object[] args
)

没有什么可以阻止您创建自己的(尽管我可能只是委托给内置的string.Format)。

使用params: http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

这里没有魔法Cody,看看这个方法:

public static void UseParams(params int[] list) 
    {
        for (int i = 0 ; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.WriteLine();
    }

你可以通过任意数量的int来调用它,它是params参数类型:)

编辑:

params非常有用它允许我们,例如,以动态的方式传递给我们的日志包装器的所有方法的参数值,而不知道每个方法有多少个参数,然后记录器将使用反射逐个转储所有这些值,以找出参数名称

字符串中的大括号是占位符,其中的数字表示要替换的参数的索引。

格式的类型是(string format, params object[] args),它是索引在这个object[]是有帮助的。

(我认为它内部使用StringBuilder.AppendFormat)来替换这些值)

字符串的签名。格式如下:

public static string Format (string format, params Object[] args)

注意第二个参数,用params关键字标记。它提供了在调用函数时添加多个参数的功能。在函数内部,您可以通过索引或迭代args数组来访问参数:

public static string Format (string format, params Object[] args)
{
    foreach (Object o in args)
        Console.WriteLine(o);
}

看一下c#参考