-1

我有以下程序来读取测试文件

public static string[] method1()
{
    //List<string[]> allLines = new List<string[]>();
    TextReader tr = new StreamReader("data.txt");
    // write a line of text to the file
    string word = tr.ReadLine();

    //now split this line into words
    string[] val = word.Split(new Char[] { ',' });

    //Console.WriteLine(val[0]);
    //Console.WriteLine(val[1]);
    //Console.ReadLine();
    return val;
}

public static void method2()
{
   method1();
   var value1= val[0];
  //Console.WriteLine(val[0]);
}

它显示错误名称“val”在当前上下文中不存在。如何解决这个问题?

4

5 回答 5

2

您没有将方法的返回值分配给您的var

var val = method1();

然后你可以这样做:

if(val.Length > 0)
     var value1= val[0];

您也可以改进您的方法,例如:

public static string[] method1()
    {

       //...Textreader lines and then 
        return word.Split(','); // no need to use new Char[] as , is already a single character
    }
于 2012-08-31T09:59:36.173 回答
0

从 的角度来看method2method1是:

public static string[] method1()

而已。method1 中的所有其他代码对它来说都是未知的。它不知道tr, orwordval。它不会知道您是否更改它们(这是为什么这种无知method2是一件好事的几个原因之一)。唯一method2“知道”的是它method1是静态的,接受零参数,并返回一个字符串数组。

因此,您需要对退货做一些事情。您可以将其存储在一个变量中,该变量可以被调用val或其他。

public static void method2()
{
   var val = method1();
   var value1= val[0];
   Console.WriteLine(val[0]);
}

或同样:

public static void method2()
{
   var imBoredOfTheNameVal = method1();
   var value1= imBoredOfTheNameVal[0];
   Console.WriteLine(imBoredOfTheNameVal[0]);
}

两者完全相同。

您也可以直接对返回值进行操作:

public static void method2()
{
   Console.WriteLine(method1()[0]);
}
于 2012-08-31T11:04:08.240 回答
0

需要获取方法1返回的结果:

 public static string[] method1()
    {
        //List<string[]> allLines = new List<string[]>();
        TextReader tr = new StreamReader("data.txt");
        // write a line of text to the file
        string word = tr.ReadLine();

        //now split this line into words
        string[] val = word.Split(new Char[] { ',' });

        //Console.WriteLine(val[0]);
        //Console.WriteLine(val[1]);
        //Console.ReadLine();
        return val;
    }

    public static void method2()
    {

        var value1 = method1();

        Console.WriteLine(value1.First());
        //Console.WriteLine(val[0]);
    }
于 2012-08-31T10:57:11.007 回答
0

您尚未在方法 2 中定义 val。尝试:

公共静态无效方法2()

{ 
 var val =  method1(); 
    var value1= val[0]; 
  //Console.WriteLine(val[0]); 

}

于 2012-08-31T10:05:01.107 回答
0

您没有正确分配变量 val 请参阅下面如何正确使用它

public static void method2()
{
       var val = method1();
        var value1= val[0];
      Console.WriteLine(value1);

我建议您在与 [0] 一起使用之前检查 val.Length 是否 > 0

但是,如果您确信从 method1 返回的 Length of string[] 将始终具有 [0] 索引,并且您只想使用其中的 [0] 而不是为什么不使用更短的语法

像这样:

Console.WriteLine(method1()[0]);
于 2012-08-31T10:01:11.527 回答