From 249a2f9ce36add06f13ca62b20a54ca23144398d Mon Sep 17 00:00:00 2001
From: ninemine <1371605831@qq.com>
Date: Mon, 15 Dec 2025 11:38:49 +0800
Subject: [PATCH] =?UTF-8?q?=E5=86=85=E7=BD=AE=E6=9B=B4=E5=8A=A0=E5=8F=8B?=
=?UTF-8?q?=E5=A5=BD=E7=9A=84=E7=B1=BB=E5=9E=8B=E6=89=93=E5=8D=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PublicTypes/InjectVariable/CStyle.cs | 80 ++++++++++++++++++++++++----
1 file changed, 71 insertions(+), 9 deletions(-)
diff --git a/PublicTypes/InjectVariable/CStyle.cs b/PublicTypes/InjectVariable/CStyle.cs
index 5989ceb..03d741a 100644
--- a/PublicTypes/InjectVariable/CStyle.cs
+++ b/PublicTypes/InjectVariable/CStyle.cs
@@ -1,14 +1,79 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
-using System.Threading.Tasks;
namespace Convention.RScript.Variable.CStyle
{
public class CScriptRScriptVariableGenerater : RScriptInjectVariableGenerater
{
+ ///
+ /// 获取类型的友好显示名称,支持泛型、数组等复杂类型
+ ///
+ public static string GetFriendlyName(Type type)
+ {
+ if (type == null) return null;
+
+ // 处理泛型类型
+ if (type.IsGenericType)
+ {
+ // 特殊处理可空类型(Nullable)
+ if (type.IsNullable())
+ {
+ return $"{GetFriendlyName(type.GetGenericArguments()[0])}?";
+ }
+
+ var sb = new StringBuilder();
+ // 获取类型基础名称(移除 `1, `2 等后缀)
+ string baseName = type.Name.Contains('`') ? type.Name[..type.Name.IndexOf('`')] : type.Name;
+ sb.Append(baseName);
+ sb.Append('<');
+
+ // 递归处理泛型参数
+ Type[] args = type.GetGenericArguments();
+ for (int i = 0; i < args.Length; i++)
+ {
+ if (i > 0) sb.Append(", ");
+ sb.Append(GetFriendlyName(args[i]));
+ }
+
+ sb.Append('>');
+ return sb.ToString();
+ }
+
+ // 处理数组类型
+ if (type.IsArray)
+ {
+ string elementName = GetFriendlyName(type.GetElementType());
+ int rank = type.GetArrayRank();
+ return rank == 1 ? $"{elementName}[]" : $"{elementName}[{new string(',', rank - 1)}]";
+ }
+
+ // 处理指针类型
+ if (type.IsPointer)
+ {
+ return $"{GetFriendlyName(type.GetElementType())}*";
+ }
+
+ // 处理引用类型(ref/out 参数)
+ if (type.IsByRef)
+ {
+ return $"{GetFriendlyName(type.GetElementType())}&";
+ }
+
+ // 普通类型直接返回名称
+ return type.Name;
+ }
+
+ ///
+ /// 判断是否为可空类型
+ ///
+ public static bool IsNullable(Type type)
+ {
+ return type.IsGenericType &&
+ type.GetGenericTypeDefinition() == typeof(Nullable<>);
+ }
+
public static string GetTypename(Type type)
{
if (type == typeof(int))
@@ -21,12 +86,7 @@ namespace Convention.RScript.Variable.CStyle
return "bool";
if (type == typeof(void))
return "void";
- if (type.IsEnum)
- return type.FullName.Replace('`', '_');
- if (type.IsClass)
- return type.FullName.Replace('`', '_');
- var name = type.Name.Replace('`', '_');
- return name;
+ return GetFriendlyName(type).Replace('`', '_');
}
private int m_layer = 0;
@@ -116,7 +176,9 @@ namespace Convention.RScript.Variable.CStyle
protected override string WritePageHead(Type currentType)
{
- return $"#include\"{GetFilename(currentType.BaseType)}\"";
+ if (currentType.BaseType != null)
+ return $"#include\"{GetFilename(currentType.BaseType)}\"";
+ return string.Empty;
}
public override string GetFilename(Type currentType)