在 C# 中将 await 函数返回的值作为参数传递是否可以?

Is it fine to pass a value returned by await function as parameters in C#

我已经声明了一个字符串扩展方法来解码 Base64 字符串,例如:

        public static string DecodeFromBase64String(this string base64String)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(base64String));
        }

现在有一个上传文件的异步函数,returns我是它的 id 的 base64 编码值。 那么,如果我简单地在参数中使用 await 传递这个函数就可以了吗,比如:

// Approach 1
var fileId = StringExtensions.DecodeFromBase64String( await uplodFile(FilePath) );

或者我应该做一个两步过程,首先获取 base64 id,然后在下一步中对其进行解码。这要求我要么声明两个具有有意义名称的变量,要么只重用相同的变量

// Approach 2
var base64fileId = await uploadFile(FilePath); 
var fileId = StringExtensions.DecodeFromBase64String(base64fileId);

// Approach 3
var fileId = await uploadFile( Filepath); // at this step file Id doesn't make much sense, but reduces need of extra variable
fileId = StringExtensions.DecodeFromBase64String(fileId);

您认为哪种方法最符合设计原则。 我还在学习C#,所以请原谅我的任何错误。

您是在询问内联调用依赖函数是否“可以”,或者您是否需要临时变量。答案当然是可以的

一种方式是否比另一种方式更具可读性可能值得商榷,但在您的具体示例中,我会说内联版本更具可读性,因为一目了然地解析的噪音和临时变量更少(假设您阅读那个嘈杂的 Encoding. 命名空间并使用函数调用的 => 形式以获得更少的噪音)。考虑一下:

    public static string DecodeFromBase64String(this string base64String) =>
        UTF8.GetString(Convert.FromBase64String(base64String));

关于此的注意事项:

but reduces need of extra variable

这对任何事情来说都是一个可怕的论据。生成的 IL 将为该函数调用使用堆栈,而生成的本机代码将根据需要使用寄存器。你只是无缘无故地让你的代码更难解析。