C# - 使字符串打印到控制台的方式不同,但在原始形式的其他地方使用

时间:2011-05-29 04:14:36

标签: c# .net extension-methods string-formatting tostring

我有一个奇怪的问题。在这里 -

让我们考虑下面的代码片段:

string test ="this is a test string";
Console.WriteLine(test);

我希望它能打印出不同的东西 - 比如yup, this is a test string。实际上,我想看看字符串是否匹配某些模式,如果是这样,我希望它以不同方式打印。我希望只有当我将它打印到控制台时才会出现这种情况,但每当我在其他地方使用它时,它应该是原始的。

我希望我可以在String类(或Object类?)上编写扩展方法,并根据我的需要返回ToString(),但文档说:

  

永远不会有扩展方法   如果它具有相同的签名则调用   在类型中定义的方法。

有没有可能做这样的事情?我不能使用新的类型。或者也许尝试使ToString()表现不同不是要走的路。但有没有办法以不同的方式对控制台进行特定的字符串打印,但在其他地方以原始形式使用?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

public static class StringExtension
{
    public static void WriteToConsole(this string text)
    {
        string result;
        if (<matches1>)
            result = "111";
        else if (<matches1>)
            result = "222";
        Console.WriteLine(result);
    }
}

用法是:

string test = "this is a test string";
test.WriteToConsole();

答案 1 :(得分:1)

从技术上讲,您可以实施IFormatProvider并将其传递给Console.WriteLine

要使其默认使用,您可以尝试制作自定义[CultureInfo](http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx)并将其设置为您的应用使用。

从未尝试过这个,所以请注意。