-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

変数 val を正しく割り当てていません。正しく使用する方法については、以下を参照してください。

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

[0] で使用する前に、val.Length が > 0 かどうかを確認することをお勧めします。

しかし、method1 から返される string[] の長さのインデックスが常に [0] であると確信している場合は、より短い構文を使用しない理由よりも [0] を使用したいだけです。

このような:

Console.WriteLine(method1()[0]);
于 2012-08-31T10:01:11.527 に答える
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

の観点からはmethod2、次のmethod1とおりです。

public static string[] method1()

それでおしまい。method1 の他のすべてのコードは不明です。tr、またはwordまたはについてはわかりませんval。それらを変更したかどうかはわかりません (これは、 のこの無知が良いことであるいくつかの理由の 1 つ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]);
}

2つはまったく同じです。

戻り値を直接操作することもできます。

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

method2 で val を定義していません。試す:

public static void method2()

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

}

于 2012-08-31T10:05:01.107 に答える