使用通过';找到的值;.包含';

本文关键字:包含 | 更新日期: 2023-09-27 18:29:08

这是一个控制台单位转换程序,它接受用户指定的测量单位(如磅、盎司),然后是第二个测量单位,最后是一个从一个单位转换为另一个单位的值。

string userUnit1, userUnit2 = "";
int userValue = 0;

可以使用的单位在文本文件中指定,文本文件的内容在程序中被拆分为字符串数组(称为"单位")。文本文件还包含两个单位之间的"转换值"。在文本文件中,它们看起来是这样的:盎司,克,28.0(因为一盎司中有28克,所以这个值也被放入数组中)。

用户输入的单位用以下代码片段进行检查:

double result = 0;
if (units.Contains(userUnit1) && units.Contains(userUnit2))
{
    //??? Something like:
    //result = userValue */ value in the array element;
}

上面的基本IF语句检查数组中用户输入的单位,我想做的是使用该数组元素中的转换值来转换用户输入的数字。我该怎么做?

EDIT:这是用于将拆分的文本存储到数组中的代码。

using (read = new StreamReader("C:/Users/Sam Smith/Desktop/convert.txt"))
            {
                while (!read.EndOfStream)
                {
                    lineFromFile = read.ReadLine();
                    lineFromFile.Split(' ');
                    foreach (int i in lineFromFile)
                    {
                        count++;
                        if (count % 3 == 0)
                        {
                            units.Add(lineFromFile);
                        }
                    }
                }
            }

使用通过';找到的值;.包含';

类似的东西?

String path = @"C:'Users'Sam Smith'Desktop'convert.txt";
var lines = System.IO.File.ReadLines(path)
           .Where(l => l.Contains(userUnit1) && l.Contains(userUnit2));
if(lines.Any())
{
    var unit = lines.First();
    var parts = unit.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries);
    var result = userValue * double.Parse(parts[2]);
}

您需要引用Enumerable.Where的System.Linq命名空间。您可以使用File.ReadLinesIEnumerable<string>的形式检索文件中的所有行。

在unit1Index和unit2Index中使用IndexOf方法并与-1进行比较以确保找到它们,或者使用FirstOrDefault扩展方法并与null进行比较。

听起来你也应该用它做一个dictionay,这会用TryGetValue简化它。

var conversionsDic = File.ReadAllLines("conversions.txt")
                         .Select(l => l.Split(' '))
                         .ToDictionary(ls => ls[0] + ls[1], ls => double.Parse(ls[2]));
double conversion;
if (conversionsDic.TryGetValue(userUnit1 + userUnit2, out conversion))
{
    // use 'conversion' to do whatever
    var result = userValue * conversion;
}