Проблема с присвоением переменной C # - PullRequest
1 голос
/ 26 августа 2011

Когда я возвращаю строку timeTaken, она имеет значение null и говорит об этом в IDE, хотя она была определена в основном методе (TimeSpan timeTaken = timer.Elapsed;)

class Program
{    
    public static string timeTaken;    

    static void Main(string[] args)
    {                
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline);    
        Stopwatch timer = new Stopwatch();
        timer.Start();               
        using (var response = request.GetResponse());
        timer.Stop();    
        TimeSpan timeTaken = timer.Elapsed;
        ...
    }
}            

Как я могу вывести timeTaken?

Ответы [ 4 ]

3 голосов
/ 26 августа 2011

Вы определяете локальную переменную с тем же именем

TimeSpan timeTaken

, который скрывает ваше поле статического класса.

Чтобы вывести значение timer.Elapsed, вы можете написать что-то вроде этого:

Console.WriteLine("{0}", timer.Elapsed);
0 голосов
/ 26 августа 2011

Вы, вероятно, хотите что-то похожее на это: -

class Program
{
  public static string timeTaken;
  static void Main(string[] args)
  {
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline);
    System.Diagnostics.Stopwatch timer = new Stopwatch();
    timer.Start();
    using (var response = request.GetResponse())
    timer.Stop();
    timeTaken = timer.Elapsed.ToString();
  }
}
0 голосов
/ 26 августа 2011

Вы допустили простую ошибку: вы снова определяете переменную timeTaken внутри static void Main(...) в строке

TimeSpan timeTaken = timer.Elapsed;

Это затеняет статическое определение. Чтобы вернуться в поле статического класса, используйте

Program.timeTaken = ...

подумайте о наименовании (например, назовите ваше статическое поле _timeTaken или просто используйте

timeTaken = timer.Elapsed;

вместо

TimeSpan timeTaken = timer.Elapsed;
0 голосов
/ 26 августа 2011

Существует две переменные timeTaken, одна локальная для функции Main, другая является статическим членом класса.Чтобы явно обратиться к строке, используйте Program.timeTaken.В любом случае лучше, если вы реорганизуете код, чтобы иметь разные имена.

...