如果变量为null,为什么我没有得到null异常?

时间:2013-09-18 12:29:16

标签: c# winforms

这是代码:

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也不为null,并且能够找到并读取“rainMap.html”

我的意思是如果变量localFilename为null,文件下载到哪里? C: ? D :? 万一它是null什么是默认位置?

4 个答案:

答案 0 :(得分:3)

连接null有效,你不会得到任何异常。这就是正在发生的事情

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

如果该位置是相对位置,则该文件将存储在exe的phisycal位置。

来自MSDN

  

相反,空字符串不引用System.String对象的实例,并且任何尝试在空字符串上调用方法都会导致NullReferenceException。但是,您可以在串联和比较操作中使用空字符串与其他字符串。

答案 1 :(得分:3)

因为此(null + " hello")C#中是完全合法的表达式。

如果查看How to: Concatenate Multiple Strings (C# Programming Guide),您可以找到以下声明:

  

在字符串连接操作中,C#编译器处理null   字符串与空字符串相同,但不转换该值   原始的空字符串。

答案 2 :(得分:0)

concat(+)运算符只将null视为空字符串。

使用的路径是工作目录。

答案 3 :(得分:0)

默认位置与可执行文件的位置相同。

因此,如果您的可执行文件在C:\MyProgram\运行,则WebClient会将文件下载到C:\MyProgram\rainMap.html ..而您的rainMapToRead将从C:\MyProgram\rainMap.html读取

这是因为null + "String" == "String"