我在项目中编写了此函数,以便在本地保存有关用户帐户的一些详细信息
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
的第二个**/
请注意,这仅在AttributeName
为null
或""
为什么会发生这种情况或者我做错了什么?
答案 0 :(得分:2)
如果AttributeName
为null
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>
}
}