2013-09-18 3 views
2

Это код:Почему я не получаю null-исключение, если переменная имеет значение null?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Net; 
using System.Text.RegularExpressions; 
using System.IO; 
using unfreez_wrapper; 
using Shell32; 


namespace DownloadImages 
{ 
    public partial class Form1 : Form 
    { 
     string rainMapToRead; 
     string UrlsPath; 
     int counter; 
     UnFreezWrapper uf; 
     string localFilename; 
     string stringForSatelliteMapUrls; 
     string satelliteMapToRead; 
     List<string> StartTags; 
     List<string> LastTags; 
     List<string> Maps; 

     ExtractImages ei; 

     public Form1() 
     { 
      InitializeComponent(); 




       using (WebClient client = new WebClient()) 
       { 
        client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=1&continent=europa#",localFilename + "rainMap.html"); 
        client.DownloadFile("http://www.sat24.com/en/eu?ir=true", localFilename + "satelliteMap.html"); 
       } 

       rainMapToRead = File.ReadAllText(localFilename + "rainMap.html"); 
       satelliteMapToRead = File.ReadAllText(localFilename + "satelliteMap.html"); 

localFileName был перед путь к директории. Но теперь я не определил его так, что он равен нулю. Но даже когда это null, rainMapToRead не является нулевым, и ему удалось найти и прочитать «rainMap.html»

Я имею в виду, если переменная localFilename имеет значение NULL, где файл был понижен до? C:? D:? В случае, если это нулевое значение по умолчанию?

+0

Использование нуля в результатах конкатенации строк в пустом string.'Console.WriteLine (нуль + "Foo"); '' печатает Foo' –

ответ

3

bacause this (null + " hello") является совершенно законным выражением в C#.

Если вы посмотрите на How to: Concatenate Multiple Strings (C# Programming Guide), вы можете найти следующее заявление:

В операции конкатенации строковых C# компилятор обрабатывает нуль строку так же, как пустая строка, но она не преобразует значение исходной пустой строки.

3

Согласование null действительное, вы не получите никаких исключений. Это то, что происходит

null + "satelliteMap.html" = "satelliteMap.html" 

При условии, что это относительное расположение, файл будет храниться на phisycal расположения ехе.

От MSDN

напротив, пустая строка не ссылается на экземпляр объекта System.String и любой попытке вызвать метод на пустую строку вызывает NullReferenceException. Тем не менее, вы можете использовать нулевые строки в конкатенации и операции сравнения с другими строками.

0

Оператору CONCAT (+) просто лечит null как пустая строка.

Путь, используемый в рабочем каталоге.

0

Место по умолчанию - то же место, что и исполняемый файл.

Так что, если ваш исполняемый файл работает на C:\MyProgram\, то WebClient загрузит файл C:\MyProgram\rainMap.html .. и ваш rainMapToRead будет читать C:\MyProgram\rainMap.html.

Это потому, что null + "String" == "String"

Смежные вопросы