我有一个奇怪的问题。在这里 -
让我们考虑下面的代码片段:
string test ="this is a test string";
Console.WriteLine(test);
我希望它能打印出不同的东西 - 比如yup, this is a test string
。实际上,我想看看字符串是否匹配某些模式,如果是这样,我希望它以不同方式打印。我希望只有当我将它打印到控制台时才会出现这种情况,但每当我在其他地方使用它时,它应该是原始的。
我希望我可以在String类(或Object类?)上编写扩展方法,并根据我的需要返回ToString(),但文档说:
永远不会有扩展方法 如果它具有相同的签名则调用 在类型中定义的方法。
有没有可能做这样的事情?我不能使用新的类型。或者也许尝试使ToString()表现不同不是要走的路。但有没有办法以不同的方式对控制台进行特定的字符串打印,但在其他地方以原始形式使用?
答案 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)并将其设置为您的应用使用。
从未尝试过这个,所以请注意。