gpt4 book ai didi

c# - 如何在一行中传递元组结果

转载 作者:行者123 更新时间:2023-11-30 15:13:33 24 4
gpt4 key购买 nike

我有一个返回 logLevel 和字符串的方法,我这样调用它:

Tuple<LogLevel, string> levelAndMessage = SomeMethod();
logger.Log(levelAndMessage.Item1, levelAndMessage.Item2);

我想将它更改为一行(不声明变量,因为有时作用域会发生冲突)。

它应该看起来像:

logger.Log(SomeMethod().ToValueTuple());

然后我得到错误

Argument 1: cannot convert from '(NLog.LogLevel, string)' to 'NLog.LogEventInfo' (CS1503)

我该如何解决?

最佳答案

可以为 Logger 编写一个扩展方法:

public static class LoggerExt
{
public static void Log(this Logger logger, (LogLevel logLevel, string message) args)
{
logger.Log(args.logLevel, args.message);
}
}

然后你可以随心所欲地调用它:

var logger = new Logger();

// ...

logger.Log(SomeMethod());

完整的可编译控制台应用示例:

namespace ConsoleApp1
{
public enum LogLevel
{
Low,
Medium,
High
}

public sealed class Logger
{
public void Log(LogLevel logLevel, string message)
{
// ...
}
}

public static class LoggerExt
{
public static void Log(this Logger logger, (LogLevel logLevel, string message) args)
{
logger.Log(args.logLevel, args.message);
}
}

class Program
{
public static void Main()
{
var logger = new Logger();

// ...

logger.Log(SomeMethod());
}

public static (LogLevel logLevel, string message) SomeMethod()
{
return (LogLevel.High, "Some message");
}
}
}

但是,在不知道你想在哪里使用它的完整上下文的情况下,我不能说这是一个好主意......

(请注意,此答案使用的是 C# 7.x 元组;如果您使用的是早期版本,则必须适当调整参数类型以使用 Tuple<>。)

关于c# - 如何在一行中传递元组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com