using UnityEngine; using System.Collections.Generic; using System.Collections; using System; public class IterableConverter : IEnumerable { private IEnumerable iterable; private Converter converter; IEnumerator IEnumerable.GetEnumerator() { // call the generic version of the method return this.GetEnumerator(); } public IEnumerator GetEnumerator() { return iterator (); } public IterableConverter(IEnumerable _iterable,Converter _converter) { iterable = _iterable; converter = _converter; } public IEnumerator iterator() { return new IteratorConverter(iterable.GetEnumerator(),converter); } private class IteratorConverter : IEnumerator { public List appLines { get; set; } private int position; private IEnumerator iterator; private Converter converter; public IteratorConverter(IEnumerator _iterator,Converter _converter) { iterator = _iterator; converter = _converter; } public bool MoveNext() { return iterator.MoveNext(); } public A Current { get{ return converter.conv (iterator.Current); } } public void Reset() { // ホントはremove? iterator.Reset(); } object IEnumerator.Current { get { return (appLines.ToArray())[position] ; } } public void Dispose() { ((IEnumerator)this.appLines).Dispose (); } } public interface Converter{ A conv (B _b); } }