internal static IList <byte> GetBytes(object?value, bool useHint, CodeContext?context = null) { switch (value) { case IList <byte> lob when !(lob is ListGenericWrapper <byte>): return(lob); case IBufferProtocol bp: using (IPythonBuffer buf = bp.GetBuffer()) { return(buf.AsReadOnlySpan().ToArray()); } case ReadOnlyMemory <byte> rom: return(rom.ToArray()); case Memory <byte> mem: return(mem.ToArray()); default: int len = 0; if (useHint) { PythonOps.TryInvokeLengthHint(context ?? DefaultContext.Default, value, out len); } List <byte> ret = new List <byte>(len); IEnumerator ie = PythonOps.GetEnumerator(value); while (ie.MoveNext()) { ret.Add(GetByte(ie.Current)); } return(ret); } }