繁体   English   中英

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

[英]c# how to assign Console.WriteLine to variable

我想缩短输入 Console.WriteLine 并将其分配给 var 例如: var write = Console.WriteLine(); 并像 write("My name is..") 一样执行它; >>>输出>> 我的名字是...

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

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 之前准备就绪,并且是一个名为“Static Using Statmenets”的功能,您可以在此处阅读更多相关信息: http : //msdn.microsoft.com/en-us /杂志/dn683793.aspx

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

用法:

write("log this");

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

你正在寻找的是一个动作。 像这样使用它:

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

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

delegate void ProcessString(string input); .

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

ProcessString write = new ProcessString(Console.WriteLine); .

然后你可以调用write ,它的行为完全像Console.WriteLine

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM