当(如果语句)结束时,函数停止

时间:2014-01-30 12:21:39

标签: c# if-statement

我在项目中编写了此函数,以便在本地保存有关用户帐户的一些详细信息

public void Forward(string Path,string Name,List<string> AttributeName = null,List<string> AttributeValue = null,string Value = null, int NumberOfNames = 1,bool EndA = true,bool EndB = true)
{
        <codes>
        */if (!AttributeName .Contains(null) || AttributeName .Contains(""))
        {
            var Text1 = AttributeName;
            var Text2 = AttributeValue;
            var BothText = Text1.Zip(Text2, (t1, t2) => new { Word1 = t1, Word2 = t2 });
            foreach (var tt in BothText)
            {
                Lab.SaveAttribute(tt.Word1, tt.Word2);
            }
        }
     **/if (!Value.Contains(null) || Value.Contains(""))
        {
            <codes>
        }
        if (EndA)
        {
            <codes>
        }
        if (EndB)
        {
            <codes>
        }
}

问题是,当标有If Statement的第一个*/结束时,整个Function结束,而没有到达标有if Statement的第二个**/

请注意,这仅在AttributeNamenull""

时才会发生

为什么会发生这种情况或者我做错了什么?

3 个答案:

答案 0 :(得分:2)

如果AttributeNamenull AttributeName.Contains(null),则会抛出NullReferenceException

在访问任何成员函数之前先检查AttributeName != null

答案 1 :(得分:2)

如果AttributeName为空,则您对AttributeName.Contains的调用将抛出NullReferenceException。这就是你的方法退出的原因。

您还将null传递给Contains。如果您查看Contains的文档,如果您传入ArgumentNullException包含null. What are you expecting null`,您会看到它会引发to do when you pass in

我猜测在调用堆栈的某个地方你正在捕获这个异常并默默地忽略它!使用调试器逐步执行代码,您将立即看到问题。

答案 2 :(得分:1)

public void Forward(string Path,string Name,List<string> AttributeName = null,List<string> AttributeValue = null,string Value = null, int NumberOfNames = 1,bool EndA = true,bool EndB = true)
{
        <codes>
        */if (!AttributeName.Equals(null) || AttributeName.Equals(""))
        {
            var Text1 = AttributeName;
            var Text2 = AttributeValue;
            var BothText = Text1.Zip(Text2, (t1, t2) => new { Word1 = t1, Word2 = t2 });
            foreach (var tt in BothText)
            {
                Lab.SaveAttribute(tt.Word1, tt.Word2);
            }
        }
     **/if (!Value.Equals(null) || Value.Equals(""))
        {
            <codes>
        }
        if (EndA)
        {
            <codes>
        }
        if (EndB)
        {
            <codes>
        }
}