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)