<PackageReference Include="System.Drawing.Common" Version="10.0.0-rc.2.25502.107" />

DataStore<TOleServices>

sealed class DataStore<TOleServices> : IDataObjectInternal where TOleServices : IOleServices
using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection.Metadata; using System.Runtime.CompilerServices; using System.Runtime.Serialization; namespace System.Private.Windows.Ole { [NullableContext(1)] [Nullable(0)] internal sealed class DataStore<[Nullable(0)] TOleServices> : IDataObjectInternal where TOleServices : IOleServices { [NullableContext(2)] [Nullable(0)] private readonly struct DataStoreEntry { [Required] public object Data { get; } [Required] public bool AutoConvert { get; } public DataStoreEntry(object data, bool autoConvert) { Data = data; AutoConvert = autoConvert; } } [Nullable(new byte[] { 1, 1, 0, 0 })] private readonly Dictionary<string, DataStoreEntry> _mappedData = new Dictionary<string, DataStoreEntry>(BackCompatibleStringComparer.Default); private bool TryGetDataInternal<[Nullable(2)] T>(string format, bool autoConvert, [NotNullWhen(true)] [MaybeNullWhen(false)] out T data) { data = default(T); if (string.IsNullOrWhiteSpace(format)) return false; if (<TryGetDataInternal>g__TryGetData|1_0(format, ref autoConvert, out data)) return true; if (!autoConvert) return false; List<string> list = new List<string>(); DataFormatNames.AddMappedFormats<List<string>>(format, list); foreach (string item in list) { if (<TryGetDataInternal>g__TryGetData|1_0(item, ref autoConvert, out data)) return true; } return false; } [return: Nullable(2)] public object GetData(string format, bool autoConvert) { TryGetDataInternal(format, autoConvert, out object data); return data; } [return: Nullable(2)] public object GetData(string format) { return GetData(format, true); } [return: Nullable(2)] public object GetData(Type format) { return GetData(format.FullName); } public void SetData(string format, bool autoConvert, [Nullable(2)] object data) { ArgumentException.ThrowIfNullOrWhiteSpace(format, "format"); ((IOleServices)).ValidateDataStoreData(ref format, autoConvert, data); _mappedData[format] = new DataStoreEntry(data, autoConvert); } public void SetData(string format, [Nullable(2)] object data) { SetData(format, true, data); } public void SetData(Type format, [Nullable(2)] object data) { ArgumentNullException.ThrowIfNull(format, "format"); SetData(ArgumentValidation.OrThrowIfNull<string>(format.FullName, "format.FullName"), data); } [NullableContext(2)] public void SetData(object data) { ArgumentNullException.ThrowIfNull(data, "data"); if (data is ISerializable && !_mappedData.ContainsKey("PersistentObject")) SetData("PersistentObject", data); SetData(data.GetType(), data); } public bool GetDataPresent(Type format) { return GetDataPresent(format.FullName); } public bool GetDataPresent(string format, bool autoConvert) { if (string.IsNullOrWhiteSpace(format)) return false; if (!autoConvert) return _mappedData.ContainsKey(format); string[] formats = GetFormats(autoConvert); for (int i = 0; i < formats.Length; i++) { if (format.Equals(formats[i], StringComparison.OrdinalIgnoreCase)) return true; } return false; } public bool GetDataPresent(string format) { return GetDataPresent(format, true); } public string[] GetFormats(bool autoConvert) { string[] array = new string[_mappedData.Keys.Count]; _mappedData.Keys.CopyTo(array, 0); if (autoConvert) { int num = array.Length; HashSet<string> hashSet = new HashSet<string>(num); for (int i = 0; i < num; i++) { string text = array[i]; if (_mappedData[text].AutoConvert) { hashSet.Add(text); DataFormatNames.AddMappedFormats<HashSet<string>>(text, hashSet); } else hashSet.Add(text); } array = Enumerable.ToArray<string>((IEnumerable<string>)hashSet); } return array; } public string[] GetFormats() { return GetFormats(true); } public bool TryGetData<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format, [Nullable(new byte[] { 1, 1, 2 })] Func<TypeName, Type> resolver, bool autoConvert, [NotNullWhen(true)] [MaybeNullWhen(false)] out T data) { return TryGetDataInternal(format, autoConvert, out data); } public bool TryGetData<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format, bool autoConvert, [NotNullWhen(true)] [MaybeNullWhen(false)] out T data) { return TryGetDataInternal(format, autoConvert, out data); } public bool TryGetData<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format, [NotNullWhen(true)] [MaybeNullWhen(false)] out T data) { return TryGetDataInternal(format, false, out data); } public bool TryGetData<[Nullable(2)] [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>([NotNullWhen(true)] [MaybeNullWhen(false)] out T data) { return TryGetDataInternal(typeof(T).FullName, false, out data); } } }