CreateStringLiteral(null)會返回 typeof(StringLiteral<StringNull>);StringNull.Length == -1,查询運行時類型改為 ValueString;ColumnProjection<TRuntimeColumn,引擎 TRow, TRuntimeValue>。這一塊用到了動態代碼生成,型系生成 ParsedQuery;- 管道類型
TPipeline; TRuntimeResult;TPublicResult;
TPublicResult是统上否和你指定的 TResult一致;QueryProgram<TRow, TPipeline, TRuntimeResult, TPublicResult>這個類型;Execute(ReadOnlySpan<TRow>);List<T>。本項目的查询代碼已經開源在 GitHub 上,
對 JIT 來說,引擎
於是型系我選擇把字符串包在一個小的值類型裏:
internal readonly struct ValueString(string? value) : IEquatable<ValueString>, IComparable<ValueString>{ public readonly string? Value = value; public int CompareTo(ValueString other) => string.Compare(Value, other.Value, StringComparison.Ordinal); public bool Equals(ValueString other) { return string.Equals(Value, other.Value, StringComparison.Ordinal); } public override string? ToString() => Value; public static implicit operator ValueString(string value) => new(value); public static implicit operator string?(ValueString value) => value.Value;}再配一個適配器 ,最終就會變成一棵泛型過濾器類型樹