c#如何将Console.WriteLine分配给变量

本文关键字:分配 变量 WriteLine Console | 更新日期: 2023-09-27 18:29:20

我想缩短键入Console.WriteLine的时间,并将其分配给var,例如:var write=Console.WriteLine();并像执行write("我的名字是..");>>output>>我的名字是…

c#如何将Console.WriteLine分配给变量

将方法分配给变量是通过使用委托完成的:

Action<string> write = Console.WriteLine;
write("Hello World!");

当然,委托不能表示Console.WriteLine的每一个过载(它有18个过载)。它只能表示其中一个重载(但它可以表示这18个重载中的任何一个)。

尽管这样做只是为了缩短代码是一个有问题的想法,但您可以这样做:为Write方法定义一个委托,比如这个

delegate void WriteDelegate(string msg, params object[] args);

定义一个类型为WriteDelegate的变量,并将Console.Write分配给它:

private static readonly WriteDelegate w = Console.Write;

现在,您可以使用w调用Console.Write,无论是否使用参数:

w("Hello");
w(", {0}", "world!");

演示。

您可以有一个静态方法Write,如:

public static void Write(string value)
{
    Console.WriteLine("My name is.." + value);
}

然后你可以这样称呼它:

Write("SomeName");

使用C#6.0您可以选择使用静态导入:您可以执行:

using static System.Console;

然后在你的方法中你可以做:

WriteLine("My name is...");

编辑:自2015年1月Visual Studio 2015 CTP发布以来,静态导入功能需要明确提及静态关键字,如:

using static System.Console;

一个更灵活的选项是使用delegate。它允许您编写简单字符串或格式化字符串。

class Program
{
    delegate void writeDelegate(string format, params object[] arg);
    static void Main(string[] args)
    {
        writeDelegate write = Console.WriteLine;
        write("Simple text.");
        write("Formatted {0}: {1}", "text", 10);
        Console.ReadKey();
    }
}

无论如何,正如其他人指出的那样,这有点尴尬;我不会这么做的。你增加了混淆阅读你代码的开发人员的风险,他们可能最终成为你未来的自己。

您可以始终定义自己的方法并服从Console静态实例。然而,我认为你真正想要的东西要到c#6.0才能准备好,它是一个名为"静态使用Statmenets"的功能,你可以在这里阅读更多关于它的信息:http://msdn.microsoft.com/en-us/magazine/dn683793.aspx

void write(string message)
{
    Console.WriteLine(message);
}

用法:

write("log this");

注意:我会重新考虑您的方法的大小写和命名约定。它真的应该是Write

您想要的是一个Action。这样使用:

Action<string> write = Console.WriteLine;
write("Your message here");

这将满足您的需要。

添加到上面的@dasblinkenlight答案。将代表签名修改为

delegate void WriteDelegate(string msg = "", params object[] args);

现在将允许您使用0参数进行调用。

private static readonly WriteDelegate w = Console.Write;
w("Hello");
w(", {0}", "world!");
w(); // Calling with no parameter

这是完全无用的,但如果你无论如何都想这样做,你可以定义一个委托,如下所示:

CCD_ 10。

现在,创建一个ProcessString变量,并将可调用的Console.WriteLine传递给它:

ProcessString write = new ProcessString(Console.WriteLine);

然后您可以直接调用write,它的行为将完全类似于Console.WriteLine