这个问题很简单。我们如何在 C# 中格式化字符串?这边走:
string.Format("string goes here with placeholders like {0} {1}", firstName, lastName);
现在,是否可以创建一个扩展方法来做到这一点?
"string goes here {0} {1}".Format(firstName, lastName);
就这样。
嗯,它比看起来更复杂。其他人说这是可能的,我也不怀疑他们,但在 Mono 中似乎并非如此。
在那里,标准过载Format()
方法似乎在名称解析过程中优先,并且编译失败,因为最终在对象实例上调用静态方法,这是非法的。
鉴于此代码:
public static class Extensions
{
public static string Format(this string str, params object[] args)
{
return String.Format(str, args);
}
}
class Program
{
public static void Main()
{
Console.WriteLine("string goes here {0} {1}".Format("foo", "bar"));
}
}
Mono 编译器(mcs 2.10.2.0)回复:
foo.cs(15,54):错误CS0176:静态
成员 `string.Format(string, object)'
无法通过实例访问
引用,用类型名称限定它
反而
当然,如果扩展方法没有命名,上面的编译会很干净Format()
,但也许您确实想使用该名称。如果是这种情况,那么这是不可能的,或者至少在 .NET 平台的所有实现上都是不可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)