如何解决“方法没有重载,需要 0 个参数?”错误

本文关键字:需要 参数 错误 重载 何解决 解决 方法 | 更新日期: 2023-09-27 18:37:16

在我的简单生产者/消费者多线程项目中,我正在使用自定义队列集合。我这样定义我的TryDequeue...

public bool TryDequeue(out F data)
{
    data = default(F);
    bool success = false;
    lock (_queueLock)
    {
        if (_queue.Count > 0)
        {
            data = _queue.Dequeue();
            success = true;
            count--;
        }
    }
    return success;
}

当我尝试这个时...

private static void Consumer()
{
    while (true)
    {
        Thread.Sleep(100);
        string item = null;
        lock (sharedQueue)
        {
            while (sharedQueue.Count == 0)
                Monitor.Wait(sharedQueue);
            item = sharedQueue.TryDequeue();
        }
    Console.WriteLine("Consuming item: {0}", item);
    }
}

这是第二个线程,我收到此错误:

Error   1   No overload for method 'TryDequeue' takes 0 arguments   

谁能帮我?谢谢。

如何解决“方法没有重载,需要 0 个参数?”错误

    while (true)
    {
        Thread.Sleep(100);
        string item = null;
        lock (sharedQueue)
        {
            while (sharedQueue.Count == 0)
                Monitor.Wait(sharedQueue);
            if(sharedQueue.TryDequeue(out item)) //succes!
               ...
            else                                 //something went wrong
               ...
        }
        Console.WriteLine("Consuming item: {0}", item);
    }

您的方法返回一个bool,您需要将项目与括号之间的 out 关键字放在一起。现在,您没有传递预期的out F data参数。

item = sharedQueue.TryDequeue();

罪魁祸首。 TryDequeue()需要一个论据

sharedQueue.TryDequeue(out item);行得通吗?这似乎是你需要做的。