String怎么样?处理的格式方法
本文关键字:格式 方法 处理 怎么样 String | 更新日期: 2023-09-27 18:07:59
如Microsoft站点所述,字符串。Format将一些字符串变量排列成一个字符串,这是c#中连接字符串的另一种方式。
string.Format("Name = {0} Surname = {1}",name,surname);
我的问题是这是如何工作的?这个方法是一个特殊的方法吗,我可以创建一个类似的方法,在每个{n}只接受一个整数吗?或者该方法是否被编译器以不同的方式解释,如果是,则编译器如何访问该方法。
如果可能的话,我想看看编译器是如何解释这个方法的。
PS:当你可以向一个方法发送尽可能多的参数时,它是如何工作的?
[编辑]这是否意味着,那个字符串。格式采用第一个参数和过滤器进入一个正则表达式或任何工具(分割等)得到哪里{Number}是和地方有一个字符串标记从第二个参数部分?
向方法发送可变数量的参数是这样做的:
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#参考