我有一个for语句,它通过给定数量的事件或在这种情况下,参数。在for中,我有一个if语句,用于检查某个参数是否存在以及该参数是否存在,执行某些操作等等。
for (int i = 1; i < eventToHandle.Parameters.Count; i++)
{
if (eventToHandle.Parameters.ContainsKey($"DirectoryOne{i}") &&
eventToHandle.CustomParameters[$"DirectoryOne{i}"])
{
DirectoryInfo rootDir = new DirectoryInfo(eventToHandle.Parameters[$"DirectoryOne{i}"].ToString());
FileInfo[] files = rootDir.GetFiles();
DirectoryInfo[] subDirs = rootDir.GetDirectories();
}
我收到的错误是我不能使用&#39;&amp;&amp;&#39;在博尔和对象上。在这种情况下,什么是一个好的解决方案?也许if&#39;&amp;&amp;&#39;在这种情况下使用是不是很好?
答案 0 :(得分:1)
看起来您的代码希望确保ToString
来电的价值是安全的,因此您应该检查它是否为null
。
由于在检查对象存在后从字典中获取字符串,因此请使用TryGetValue
以避免在字典中进行多次搜索:
object dir;
if (eventToHandle.Parameters.TryGetValue($"DirectoryOne{i}", out dir) && dir != null) {
DirectoryInfo rootDir = new DirectoryInfo(dir.ToString());
FileInfo[] files = rootDir.GetFiles();
DirectoryInfo[] subDirs = rootDir.GetDirectories();
}
答案 1 :(得分:0)
首先,您不能只使用&&
运算符的对象,因为它使用bool
值运算。你必须检查它是否为空(!= null
)。
您还应该使用Directory.Exists()来检查该目录是否存在。
using System.IO;
for (int i = 1; i < eventToHandle.Parameters.Count; i++)
{
if (eventToHandle.Parameters.ContainsKey($"DirectoryOne{i}") &&
eventToHandle.CustomParameters[$"DirectoryOne{i}"] != null &&
Directory.Exists(eventToHandle.CustomParameters[$"DirectoryOne{i}"].ToString()))
{
DirectoryInfo rootDir = new DirectoryInfo(eventToHandle.Parameters[$"DirectoryOne{i}"].ToString());
FileInfo[] files = rootDir.GetFiles();
DirectoryInfo[] subDirs = rootDir.GetDirectories();
}
答案 2 :(得分:0)
如果我正确阅读它,'if'语句有2部分。首先,检查密钥是否存在(&amp;&amp;&amp;的左侧),然后检查密钥是否未映射到空值(&amp;&amp;的右侧)。和&amp;&amp;比较2个bool,但是右边不是bool类型,它是Object类型。要检查该对象引用是否为空,您必须将eventToHandle.CustomParameters[$"DirectoryOne{i}"]
更改为eventToHandle.CustomParameters[$"DirectoryOne{i}"] != null