Аргументы типа для метода 'x' не могут быть выведены из использования с помощью Parallel.ForEach - PullRequest
2 голосов
/ 12 сентября 2011

Я впервые пробую конструкцию "where T:" и получаю сообщение об ошибке при попытке использовать Parallel.ForEach.

"Аргументы типа для метода 'System.Threading.Tasks.Parallel.ForEach (System.Collections.Concurrent.OrderablePartitioner, System.Action)' не могут быть выведены из использования."

Я понимаю, почему происходит ошибка, но не могу ее исправить. Данные - это простой класс, имеющий только 2 свойства.

namespace Test
{
  internal class UnOrderedBuffer<T> where T : class
    {

        ConcurrentBag<T> GenericBag = new ConcurrentBag<T>();
    }
}


namespace Test
{
    internal class Tester
    {

     private UnOrderedBuffer<Data> TestBuffer;


     public void Update()
    {

    Parallel.ForEach(TestBuffer, Item =>
            {
                //do stuff
            });
    }

    }
}

1 Ответ

4 голосов
/ 12 сентября 2011

Первый аргумент Parallel.ForEach должен быть IEnumerable<T>, Partitioner<T> или чем-то подобным. Ваш класс UnOrderedBuffer не может быть преобразован ни в один из задействованных типов параметров. Если вы сделаете так, чтобы он реализовал IEnumerable<T> или что-то подобное, тогда он будет работать.

Дело не в аргументах типа или общих ограничениях, а в том, что ваш класс не реализует правильные интерфейсы или не расширяет соответствующий класс.

...