运营商&&'不能应用于' bool'类型的操作数和'对象'

时间:2018-01-25 12:37:09

标签: c# .net for-loop

我有一个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;在这种情况下使用是不是很好?

3 个答案:

答案 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