我如何访问元组的索引值?

问题描述 投票:0回答:3

考虑另一个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文件大小的值,如何访问其他数字值?

c# tuples
3个回答
0
投票

您可以在结果声明中指定名称:

public (double size, string unit) AdjustFileSize(...)

然后:

var filesize = AdjustFileSize(...);
FileSize = filesize.size.ToString("F");
FileUnit = filesize.unit;

声明的名称优先于Item1Item2等,但是:在出站呼叫路径中(通过属性)它们仅存在;无法通过反射结果(filesize)本身来发现它们。


0
投票

此函数返回由单个字符串而不是字符串数组组成的元组,作为一种类型。

此时从数组中提取字符串:names[nameIndex]。所述阵列的范围限于功能。它根本不会“存在”函数括号之外(或者没有办法让您告诉编译器您要访问它; .NET中的存在是一件奇怪的事情)。与sizeResultnameIndex相同。

如果要使用字符串数组作为返回值,请使用string []作为类型。如果要在其他位置访问该数组,请不要使其仅作用于作用域。就我个人而言,我可以适当地将其定义为此类的静态只读。或更可能是枚举。

但是此函数的整个[[用途是为您提供所需的一个字符串值-从无法访问的数组中-相应地将整数左移。因此,这甚至不在此代码的范围之内。


0
投票
函数仅返回一个单位的一种尺寸。

我如何访问其他数值?

更改功能以返回所有单位的尺寸

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语言;)
© www.soinside.com 2019 - 2024. All rights reserved.