Baku.LibqiDotNet.QiValue.Dump C# (CSharp) Méthode

Dump() public méthode

文字列データとしてオブジェクトの階層構造を出力します。
public Dump ( int indentStep = 2, int indentStart ) : string
indentStep int
indentStart int
Résultat string
        public string Dump(int indentStep = 2, int indentStart = 0)
        {
            var kind = ValueKind;
            string indent = new string(' ', indentStart);
            string largeIndent = new string(' ', indentStart + indentStep);

            //組み込み型
            if (new QiValueKind[] { QiValueKind.QiInt, QiValueKind.QiFloat, QiValueKind.QiString }.Contains(kind))
            {
                return indent + kind.ToString() + ":" + Value.ToString();
            }

            if (kind == QiValueKind.QiDynamic)
            {
                return indent + "Dynamic\n" + GetDynamic().Dump(indentStep, indentStart + indentStep);
            }

            //メタオブジェクトを吐く(通常使われない)
            if (kind == QiValueKind.QiObject)
            {
                return indent + "Object\n" + GetObject().MetaObject.Dump(indentStep, indentStart + indentStep);
            }

            //リスト/タプルは要素別に表示するので作業が一部似てる
            if (kind == QiValueKind.QiList || kind == QiValueKind.QiTuple)
            {
                int c = Count;

                var result = new StringBuilder(indent);
                string typeinfo = (kind == QiValueKind.QiList) ?
                    $"List[{c}]:\n" :
                    $"Tuple[{c}]:\n";
                result.Append(typeinfo);

                for (int i = 0; i < c; i++)
                {
                    result.Append(this[i].Dump(indentStep, indentStart + indentStep) + "\n");
                }

                return result.ToString();
            }

            if (kind == QiValueKind.QiMap)
            {
                var pairs = MapItems.ToArray();

                var result = new StringBuilder();
                result.Append(
                    indent +
                    $"Map<key:{GetQiType().GetMapKeyType().TypeKind}, " +
                    $"value:{GetQiType().GetMapValueType().TypeKind}>[{pairs.Length}]\n"
                    );

                foreach(var p in pairs)
                {
                    result.Append(largeIndent + "Key:\n" + p.Key.Dump(indentStep, indentStart + indentStep * 2) + "\n");
                    result.Append(largeIndent + "Value:\n" + p.Value.Dump(indentStep, indentStart + indentStep * 2) + "\n");
                }
                return result.ToString();
            }

            //ポインタとかバイナリは適切な表示法が特に無いので種類名だけ表示
            return indent + kind.ToString();
        }

Usage Example

Exemple #1
0
 /// <summary>値の情報をデバッグ用文字列として取得します。</summary>
 /// <returns>値をあらわすデバッグ用の文字列</returns>
 public string Dump() => QiValue.Dump();