/// <summary> /// ジェネリッククラスの変換 /// </summary> /// <param name="token">対象</param> /// <returns>変換結果</returns> private string GetGenericClass(SyntaxToken token) { if (!UnknownReferences.ContainsKey(token.ValueText)) { UnknownReferences.Add(token.ValueText, null); } return(token.ValueText); }
/// <summary> /// C#の型をTypeScriptの型に変換する /// </summary> /// <param name="CSSyntax">C#の型情報</param> /// <returns>TypeScriptの型に変換した文字列</returns> public string GetTypeScriptType(TypeSyntax CSSyntax) { var result = CSSyntax.ToString(); switch (CSSyntax) { case NullableTypeSyntax ns: result = $"{GetTypeScriptType(ns.ElementType)} | null"; break; case GenericNameSyntax gs: // パラメータ設定 var argsText = gs.TypeArgumentList.Arguments.Select(arg => GetTypeScriptType(arg)); result = $"{GetGenericClass(gs.Identifier)}<{string.Join(", ", argsText)}>"; break; case PredefinedTypeSyntax ps: switch (ps.ToString()) { case "int": case "float": case "double": case "decimal": result = "number"; break; case "bool": result = "boolean"; break; } break; case IdentifierNameSyntax ins: switch (ins.ToString()) { case "DateTime": result = "Date"; break; default: // 置換えクラス名の確認 var renameClassName = result; var renameClassNames = new List <string>() { result, $"{ProcessClassName}.{result}" }; foreach (var className in renameClassNames) { if (RenameClasseNames.ContainsKey(className)) { return(RenameClasseNames[className]); } } result = result.Replace(".", "_", StringComparison.CurrentCulture); if (!UnknownReferences.ContainsKey(ins.ToString())) { UnknownReferences.Add(ins.ToString(), null); } break; } break; default: result = result.Replace(".", "_", StringComparison.CurrentCulture); if (!UnknownReferences.ContainsKey(result)) { UnknownReferences.Add(result, null); } if (RenameClasseNames.ContainsKey(result)) { return(RenameClasseNames[result]); } break; } return(result); }