ソースコード
using System; using System.Collections.Generic; using JetBrains.Annotations; using UnityEngine; namespace Kogane { public static class IEnumerableLogExtensionMethods { public delegate void LogDelegate( object item ); public static LogDelegate OnLog { get; set; } = item => Debug.Log( item ); public static LogDelegate OnLogWarning { get; set; } = item => Debug.LogWarning( item ); public static LogDelegate OnLogError { get; set; } = item => Debug.LogError( item ); public static IEnumerable<T> Log<T>( [NotNull] this IEnumerable<T> source ) { if ( source == null ) throw new ArgumentNullException( nameof( source ) ); IEnumerable<T> Iterator() { foreach ( var x in source ) { OnLog?.Invoke( x ); yield return x; } } return Iterator(); } public static IEnumerable<T> LogWarning<T>( [NotNull] this IEnumerable<T> source ) { if ( source == null ) throw new ArgumentNullException( nameof( source ) ); IEnumerable<T> Iterator() { foreach ( var x in source ) { OnLogWarning?.Invoke( x ); yield return x; } } return Iterator(); } public static IEnumerable<T> LogError<T>( [NotNull] this IEnumerable<T> source ) { if ( source == null ) throw new ArgumentNullException( nameof( source ) ); IEnumerable<T> Iterator() { foreach ( var x in source ) { OnLogError.Invoke( x ); yield return x; } } return Iterator(); } } }
使用例
using System.Linq; using Kogane; using UnityEngine; public class Example : MonoBehaviour { private void Start() { #if ENABLE_RELEASE IEnumerableLogExtensionMethods.OnLog = null; IEnumerableLogExtensionMethods.OnLogWarning = null; IEnumerableLogExtensionMethods.OnLogError = null; #else IEnumerableLogExtensionMethods.OnLog = x => Debug.Log( x ); IEnumerableLogExtensionMethods.OnLogWarning = x => Debug.LogWarning( x ); IEnumerableLogExtensionMethods.OnLogError = x => Debug.LogError( x ); #endif var list1 = Enumerable.Range( 0, 3 ).Log().ToArray(); var list2 = Enumerable.Range( 0, 3 ).LogWarning().ToArray(); var list3 = Enumerable.Range( 0, 3 ).LogError().ToArray(); } }