考虑另一个StackOverflow问题中的以下代码:
public (double, string) AdjustFileSize(long fileSizeInBytes)
{
var names = {"BYTES", "KB", "MB", "GB"};
double sizeResult = fileSizeInBytes * 1.0;
int nameIndex = 0;
while (sizeResult > 1024 && nameIndex < names.Length)
{
sizeResult /= 1024;
nameIndex++;
}
return (sizeResult, names[nameIndex]);
}
我对元组不了解的是,我觉得在调用方法中我应该能够取回KB,MB或GB值。但是,我不知道如何。
FileSize = filesize.Item1.ToString("F"),
我得到的只是KB文件大小的值,如何访问其他数字值?
您可以在结果声明中指定名称:
public (double size, string unit) AdjustFileSize(...)
然后:
var filesize = AdjustFileSize(...);
FileSize = filesize.size.ToString("F");
FileUnit = filesize.unit;
声明的名称优先于Item1
,Item2
等,但是:在出站呼叫路径中(通过属性)它们仅存在;无法通过反射结果(filesize
)本身来发现它们。
此函数返回由单个字符串而不是字符串数组组成的元组,作为一种类型。
此时从数组中提取字符串:names[nameIndex]
。所述阵列的范围限于功能。它根本不会“存在”函数括号之外(或者没有办法让您告诉编译器您要访问它; .NET中的存在是一件奇怪的事情)。与sizeResult
和nameIndex
相同。
如果要使用字符串数组作为返回值,请使用string []作为类型。如果要在其他位置访问该数组,请不要使其仅作用于作用域。就我个人而言,我可以适当地将其定义为此类的静态只读。或更可能是枚举。
但是此函数的整个[[用途是为您提供所需的一个字符串值-从无法访问的数组中-相应地将整数左移。因此,这甚至不在此代码的范围之内。
我如何访问其他数值?
更改功能以返回所有单位的尺寸
public class FileSize
{
private readonly double _bytes;
public double Bytes => _bytes;
public double Kb => _bytes / 1024;
public double Mb => Kb / 1024;
public double Gb => Mb / 1024;
public FileSize(long size)
{
_bytes = size * 1.0
}
}
// Usage
var size = new FileSize(120000);
size.Bytes; // 120000
size.Kb; // 120
size.Mb; // 0.12
我们使用的不是OOP语言;)