c# - 是否可以创建扩展方法来格式化字符串?

标签 c# formatting extension-methods

这个问题真的很简单。我们如何在 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): error CS0176: Static member `string.Format(string, object)' cannot be accessed with an instance reference, qualify it with a type name instead

当然,如果扩展方法没有命名为Format(),上面的代码编译干净,但也许你真的想使用那个名字。如果是这种情况,那么这是不可能的,或者至少不是在 .NET 平台的所有实现上。

关于c# - 是否可以创建扩展方法来格式化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587243/

相关文章:

c# - DLL导入: Unable to find Entry Point "fnMultiply" in DLL "ImportDLL"

c# - Rails ActionController 类中的 around_filter 等价于 C# 的东西是什么?

R:使用 read.csv() 尊重数字周围的引号(视为字符)?

c# - 注入(inject) IOptions<> 的实例

groovy - 有没有一种干净的方法可以在 Kotlin 中使用 Groovy 的扩展方法?

java - 如何为Kotlin扩展功能的接收者添加KDoc注释(Java中的第一个参数,Kotlin中的 `this`)

c# - "Collection was of a fixed size"带有 POCO 的 EF4 异常

c# - C# 的 using 语句中止安全吗?

java - 使用 Transformer 缩进 XML 文本

algorithm - 找到最近的nice number