Ошибки с IEnumerator <T>и объектом - PullRequest
0 голосов
/ 05 апреля 2020

Может ли кто-нибудь помочь мне с этим кодом?

public static void enqueue()
{
    using (object obj = (object)File.ReadLines(Program.combo).GetEnumerator())
    {
        while ((((IEnumerator)obj).MoveNext() ? 1U : 0U) != (uint)0)
        {
            Program.comboQueue.Enqueue(((IEnumerator<string>)obj).Current);
        }
    }
    using (object obj2 = (object)File.ReadLines(Program.proxies).GetEnumerator())
    {
        while ((((IEnumerator)obj2).MoveNext() ? 1U : 0U) != (uint)0)
        {
            Program.proxyQueue.Enqueue(((IEnumerator<string>)obj2).Current);
        }
    }
}

Я получаю следующие ошибки:

1. При использовании generi c type IEnumerator<T> требуется Аргументы 1 типа.

2. object: тип, используемый в операторе using, должен быть неявно преобразован в System.IDisposable или реализовывать подходящий метод Dispose.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Как показано, ваш код должен выглядеть следующим образом:

public static void enqueue()
{
    using (var obj = File.ReadLines(Program.combo).GetEnumerator()) 
    {
        while (obj.MoveNext()) 
        {
            Program.comboQueue.Enqueue(obj.Current);
        }
    }
    using (var obj2 = File.ReadLines(Program.proxies).GetEnumerator())
    {
        while (obj2.MoveNext())
        {
            Program.proxyQueue.Enqueue(obj2.Current);
        }
    }
}

Но оно того стоит.

ReadLines.GetEnumerator() возвращает объект типа IEnumerator<string>, который имеет MoveNext() метода, и может быть помещен в блок using.

Приведя его к object, вы скрываете его тип от компилятора, вызывая ошибки, которые вы получаете, а также требуя ненужного приведения обратно к IEnumerator<string>.

Тем не менее, ваш код слишком сложен. foreach l oop предназначен для такого рода вещей, поэтому ваш код должен выглядеть так:

foreach (string line in File.ReadLines(Program.combo))
    Program.comboQueue.Enqueue(line);

foreach (string line in File.ReadLines(Program.proxies))
    Program.proxyQueue.Enqueue(line);
1 голос
/ 05 апреля 2020

Попробуйте сделать так:

  public static void enqueue()
    {
        using (var obj = File.ReadLines(Program.combo).GetEnumerator()) // yo dont need to cast to object
        {
            while (obj.MoveNext()) // MoveNext returns bool if it can read next recod  it will bet true 
            {
                Program.comboQueue.Enqueue(obj.Current);
            }
        }
        using (var obj2 = File.ReadLines(Program.proxies).GetEnumerator())
        {
            while (obj2.MoveNext())
            {
                Program.proxyQueue.Enqueue(obj2.Current);
            }
        }
    }

Или используйте foreach, как и выше.

  foreach (string item in File.ReadLines(Program.combo)) // yo dont need to cast to object
  {
      Program.comboQueue.Enqueue(item);
  }

  foreach (string item in File.ReadLines(Program.proxies)) // yo dont need to cast to object
  {
      Program.comboproxyQueueQueue.Enqueue(item);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...