ArraySingleString
Single dimensional array of strings.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
namespace System.Private.Windows.BinaryFormat.Serializer
{
[NullableContext(1)]
[Nullable(new byte[] {
0,
2
})]
internal sealed class ArraySingleString : ArrayRecord<string>, IRecord<ArraySingleString>, IRecord
{
[Nullable(0)]
private sealed class StringListAdapter : IReadOnlyList<string>, IEnumerable<string>, IEnumerable, IReadOnlyCollection<string>
{
[Nullable(new byte[] {
1,
2
})]
private readonly IReadOnlyList<object> _recordList;
private readonly IReadOnlyRecordMap _recordMap;
[Nullable(2)]
public string this[int index] {
[NullableContext(2)]
get {
object obj = _recordList[index];
if (obj == null)
return null;
IRecord record = obj as IRecord;
if (record == null)
throw new InvalidOperationException();
BinaryObjectString binaryObjectString = _recordMap.Dereference(record) as BinaryObjectString;
if (binaryObjectString == null)
throw new InvalidOperationException();
return binaryObjectString.Value;
}
}
int IReadOnlyCollection<string>.Count {
get {
return _recordList.Count;
}
}
internal StringListAdapter([Nullable(new byte[] {
1,
2
})] IReadOnlyList<object> recordList, IReadOnlyRecordMap recordMap)
{
_recordList = recordList;
_recordMap = recordMap;
}
[return: Nullable(new byte[] {
1,
2
})]
public IEnumerator<string> GetEnumerator()
{
return <GetEnumerator>g__GetEnumerable|7_0().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
[Nullable(new byte[] {
1,
2
})]
private readonly IReadOnlyList<object> _records;
public static RecordType RecordType => RecordType.ArraySingleString;
public override BinaryType ElementType => BinaryType.String;
internal ArraySingleString(Id objectId, [Nullable(new byte[] {
1,
2
})] IReadOnlyList<object> arrayObjects, IReadOnlyRecordMap recordMap)
: base(new ArrayInfo(objectId, arrayObjects.Count), (IReadOnlyList<string>)new StringListAdapter(arrayObjects, recordMap))
{
_records = arrayObjects;
}
private protected override void Write(BinaryWriter writer)
{
writer.Write((byte)RecordType);
_arrayInfo.Write(writer);
Record.WriteRecords(writer, _records, true);
}
}
}