C# C方法访问需要帮助吗?

C# C方法访问需要帮助吗?,c#,function,return,C#,Function,Return,我有以下程序来读取测试文件 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 s

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

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”在当前上下文中不存在。如何解决这个问题

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

然后你可以做:

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
    }

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

public static void method2()
{
       var val = method1();
        var value1= val[0];
      Console.WriteLine(value1);
我建议您先检查val.Length是否大于0,然后再将其与一起使用 [0]

但如果您确信字符串[]的长度是从method1返回的 将始终具有[0]索引,而您只想使用 [0]为什么不使用更短的语法呢

像这样:


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

公共静态无效方法2

{ 
 var val =  method1(); 
    var value1= val[0]; 
  //Console.WriteLine(val[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]);
    }
从方法2的角度来看,方法1是:

就这样。method1中的所有其他代码都是未知的。它不知道tr、word或val,也不知道你是否改变了它们,这就是为什么对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]);
}
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]);
}