2012-03-25 84 views
0

这是一个控制台单位转换程序,它接受用户指定的测量单位(如磅,盎司),然后是第二个测量单位,最后是一个转换值从一个单位到另一个单位。使用通过'.contains'找到的值

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; 
} 

基本若以上检查语句,用户进入该单位,我想要做什么的阵列是使用该数组元素中的转换值来转换用户输入的数字。我将如何去做这件事?

编辑:这是将分割文本存储到数组中的代码。

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); 
         } 
        } 
       } 
      } 
+1

您正在错误地使用拆分方法。将返回值保存到一个字符串数组中并迭代该数组。而整个功能没什么意义...... – SimpleVar 2012-03-25 21:08:10

回答

1

使用indexOf方法为unit1Index和unit2Index并比较-1,以确保他们被发现,或者使用FirstOrDefault扩展方法,并比较空。

这听起来像是你应该从中得到一个好消息,这可以通过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; 
} 
2

是这样的吗?

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.WhereSystem.Linq命名空间的引用。您可以使用File.ReadLines检索文件中的所有行,如IEnumerable<string>

+0

。哪里有不可用的,有没有一个特定的系统命名空间? – 2012-03-25 21:16:26

+0

是的,'System.Linq'([Enumerable.Where](http://msdn.microsoft.com/en-us/library/bb534803.aspx))。我觉得你必须乘以价值(相应编辑)。 – 2012-03-25 21:19:23

+0

@BoggyB添加对System.Linq的引用,并查看我的答案:) – SimpleVar 2012-03-25 21:19:48