C# Разделенные списки упрощают код

Доброе утро,

Я прихожу из среды Python и перехожу к C#.

Я делю более широкий список на более узкие списки с заданной длиной.

Есть ли способ упростить следующий код? Я предполагаю, что это довольно медленно и не совсем соответствует общим правилам кодирования C#.

List<object> B = new List<object>();
for(int i = 0; i < SD_Data.Count / 314; i++) {
  var SD_Input = SD_Data.Skip(314 * i).Take(314 * i + 313);
  B.Add(SD_Input);
}

A = B;

Я нашел этот полезный способ

public static IEnumerable<IEnumerable<T>> Chunk<T > (this IEnumerable<T> source, int chunksize)
{
  while (source.Any())
  {
    yield return source.Take(chunksize);
    source = source.Skip(chunksize);
  }      
}
var z = Chunk(x, 10);

Но это вызывает следующую ошибку:

Error (CS1513): } expected (line 69)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 88)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 88)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 89)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 89)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 90)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 91)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 92)
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 94)
Error (CS1001): Identifier expected (line 112)
Error (CS1001): Identifier expected (line 114)
Error (CS1022): Type or namespace definition, or end-of-file expected (line 115)

Я работаю над интерфейсом Grasshopper программного обеспечения Rhinoceros от McNeel.

Заранее спасибо!

3 ответа

Решение

Я наконец-то понял.

Эта тема мне очень помогла.

Работа с массивами / списком с компонентами C# в Grasshopper 3D

Проблема была поднята, так как метод был определен внутри другого метода, который является RunScript. Решение состоит в том, чтобы записать это в

// <Custom additional code>

code here

// <Custom additional code>

Итак, результат:

 private void RunScript(List<Point3d> SrcPts, List<string> Instrument, List<object> SD_Data, List<double> XY_Angles, List<string> Octave, ref object A, ref object B)
  {
    B = Chunk(SD_Data, 314);
  }

  // <Custom additional code> 

  public static IEnumerable<IEnumerable<T>> Chunk<T > (IEnumerable<T> source, int chunksize)
  {
    while (source.Any())
    {
      yield return source.Take(chunksize);
      source = source.Skip(chunksize);
    }
  }
  // <Custom additional code>

Спасибо всем за ценные советы.

Синтаксис для использования этого метода будет следующим:

var B = SD_Data.Chunk(314);

Чанк объявляется как метод расширения.

Удалить this ключевое слово, если вы хотите вызвать метод Chunk стандартным способом

public static IEnumerable<IEnumerable<T>> Chunk<T > (IEnumerable<T> source, int chunksize)
{
  while (source.Any())
  {
    yield return source.Take(chunksize);
    source = source.Skip(chunksize);
  }      
}
Другие вопросы по тегам