XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

fix-修复部分XFETransform的部分已知问题

85dc7fc
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

10 个文件 +88 -53
Modified README.md +18 -0
@@ -136,6 +136,24 @@ await lANDeviceDetector.StartDetecting();
136 136
137 137 ---
138 138
139 ## 使用X方法分析对象信息,简化调试流程
140
141 #### 在控制台输出(仅适用于C#的控制台应用程序)
142
143 ```csharp
144 var testClass = new TestClass("测试名称", "测试描述", 15);//假如这是你需要分析的某个对象
145 testClass.X();//这会将该对象的所有信息输出到控制台
146 ```
147
148 #### 在调试信息中输出(使用与所有类型的C#程序)
149
150 ```csharp
151 var testClass = new TestClass("测试名称", "测试描述", 15);//假如这是你需要分析的某个对象
152 testClass.XL();//这会将该对象的所有信息输出到调试信息输出中
153 ```
154
155 ---
156
139 157 ## XFE的ChatGPT使用示例
140 158
141 159 #### 最简单的用法
Added XFEExtension.NetCore.Analyzer.Test/Program.cs +15 -0
@@ -0,0 +1,15 @@
1 using XFEExtension.NetCore.StringExtension;
2
3 namespace XFEExtension.NetCore.Analyzer.Test;
4
5 internal class Program
6 {
7 public static void Main(string[] args)
8 {
9 var testClass = new TestClass("测试名称", "测试描述内容123123123", 60)
10 {
11 Tags = [["123", "321"], ["231", "132"]]
12 };
13 testClass.X();
14 }
15 }
Modified XFEExtension.NetCore.Analyzer.Test/TestClass.cs +9 -16
@@ -1,18 +1,11 @@
1 using XFEExtension.NetCore.WebExtension.LANDeviceDetector;
1 namespace XFEExtension.NetCore.Analyzer.Test;
2 2
3 namespace XFEExtension.NetCore.Analyzer.Test;
4
5 internal class TestClass
3 internal class TestClass(string name, string description, int age)
6 4 {
7 static async Task Main(string[] args)
8 {
9 var lANDeviceDetector = new LANDeviceDetector();
10 lANDeviceDetector.DeviceFind += LANDeviceDetector_DeviceFind;
11 await lANDeviceDetector.StartDetecting();
12 }
13
14 private static void LANDeviceDetector_DeviceFind(LANDevice sender)
15 {
16 Console.WriteLine($"IP:{sender.IPAddress}\tHost:{sender.DeviceName}");
17 }
18 }
5 public int id;
6 private int data;
7 public string Name { get; set; } = name;
8 public string Description { get; set; } = description;
9 public int Age { get; set; } = age;
10 public List<List<string>> Tags { get; set; }
11 }
Modified XFEExtension.NetCore/XFEExtension.NetCore.csproj +4 -3
@@ -19,11 +19,12 @@
19 19 <PackageTags>XFE;拓展;GPT;Server;服务器;测试;XFEExtension</PackageTags>
20 20 <PackageReleaseNotes>## 调整
21 21
22
22 修复X方法输出以及XL方法输出的部分已知问题
23 在md文档上添加X方法的使用实例
23 24
24 25 ## 新增
25 26
26 局域网探测器
27
27 28
28 29 ## 严重
29 30
@@ -32,7 +33,7 @@
32 33 <PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
33 34 <PackageLicenseFile>LICENSE</PackageLicenseFile>
34 35 <AssemblyOriginatorKeyFile>..\XFEstudio.pfx</AssemblyOriginatorKeyFile>
35 <Version>2.6.0</Version>
36 <Version>2.6.1</Version>
36 37 <Authors>XFEstudio</Authors>
37 38 </PropertyGroup>
38 39
Modified XFEExtension.NetCore/XFETransform/ObjectInfo.cs +5 -16
@@ -18,7 +18,7 @@ internal abstract class ObjectInfo : IObjectInfo
18 18 {
19 19 if (Value is null)
20 20 {
21 outPutString += $"{AddObjectPlace()} {XFEConverter.OutPutTypeName(Type)} {Name}:null\n";
21 outPutString += $"{AddObjectPlace()} 空对象 {Name}:null\n";
22 22 }
23 23 else
24 24 {
@@ -27,11 +27,6 @@ internal abstract class ObjectInfo : IObjectInfo
27 27 }
28 28 else
29 29 {
30 var tabString = string.Empty;
31 for (int i = 0; i < Layer; i++)
32 {
33 tabString += "│ ";
34 }
35 30 if (Layer == 0)
36 31 {
37 32 outPutString += $"""
@@ -44,19 +39,13 @@ internal abstract class ObjectInfo : IObjectInfo
44 39 }
45 40 else
46 41 {
47 outPutString += $"""
48 {AddObjectPlace()} {XFEConverter.OutPutTypeName(Type)} {Name}
49 {tabString}├────┬────────────────────────────
50 {SubObjects?.OutPutSubObjects()}
51 {tabString}└─────────────────────────────────
52
53 """;
42 outPutString += SubObjects?.OutPutSubObjects();
54 43 }
55 44 }
56 45 return outPutString;
57 46 }
58 47
59 private string AddObjectPlace() => ObjectPlace switch
48 internal string AddObjectPlace() => ObjectPlace switch
60 49 {
61 50 ObjectPlace.Property => "[属性]",
62 51 ObjectPlace.Field => "[字段]",
@@ -78,7 +67,7 @@ internal abstract class ObjectInfo : IObjectInfo
78 67 IsArray = false;
79 68 Value = value;
80 69 }
81 public ObjectInfo(string? name, ObjectPlace objectPlace, int layer, Type type, bool isBasicType, bool isArray, object? value = null, ISubObjects? subObjects = null)
70 public ObjectInfo(string? name, ObjectPlace objectPlace, int layer, Type type, bool isBasicType, bool isArray, object? value = null, List<IObjectInfo>? objectInfoList = null)
82 71 {
83 72 Name = name;
84 73 ObjectPlace = objectPlace;
@@ -87,6 +76,6 @@ internal abstract class ObjectInfo : IObjectInfo
87 76 IsBasicType = isBasicType;
88 77 IsArray = isArray;
89 78 Value = value;
90 SubObjects = subObjects;
79 SubObjects = new SubObjectsImpl(this, objectInfoList);
91 80 }
92 81 }
Modified XFEExtension.NetCore/XFETransform/ObjectInfoImpl.cs +1 -1
@@ -5,7 +5,7 @@ internal class ObjectInfoImpl : ObjectInfo
5 5 public ObjectInfoImpl(string? name, ObjectPlace objectPlace, int layer, Type type, bool isBasicType, object? value = null) : base(name, objectPlace, layer, type, isBasicType, value)
6 6 {
7 7 }
8 public ObjectInfoImpl(string? name, ObjectPlace objectPlace, int layer, Type type, bool isBasicType, bool isArray, object? value, ISubObjects? subObjects = null) : base(name, objectPlace, layer, type, isBasicType, isArray, value, subObjects)
8 public ObjectInfoImpl(string? name, ObjectPlace objectPlace, int layer, Type type, bool isBasicType, bool isArray, object? value, List<IObjectInfo>? objectInfoList = null) : base(name, objectPlace, layer, type, isBasicType, isArray, value, objectInfoList)
9 9 {
10 10 }
11 11 }
Modified XFEExtension.NetCore/XFETransform/SubObjects.cs +23 -6
@@ -1,6 +1,6 @@
1 1 namespace XFEExtension.NetCore.XFETransform;
2 2
3 internal abstract class SubObjects : SubObjectsBase
3 internal abstract class SubObjects(List<IObjectInfo>? objectInfoList) : SubObjectsBase(objectInfoList)
4 4 {
5 5 public override string OutPutSubObjects()
6 6 {
@@ -8,19 +8,36 @@ internal abstract class SubObjects : SubObjectsBase
8 8 for (int i = 0; i < objectInfoList.Count; i++)
9 9 {
10 10 var obj = objectInfoList[i];
11 for (int j = 0; j < obj.Layer; j++)
11 var tabString = string.Empty;
12 var currentConnectString = string.Empty;
13 for (int k = 0; k < obj.Layer; k++)
12 14 {
13 outString += "│ ";
15 tabString += "│ ";
14 16 }
17 outString += tabString;
15 18 if (i == objectInfoList.Count - 1)
16 19 {
17 outString += "└─";
20 currentConnectString = "└─";
18 21 }
19 22 else
20 23 {
21 outString += "├─";
24 currentConnectString = "├─";
25 }
26 if (obj.IsBasicType)
27 {
28 outString += currentConnectString;
29 outString += obj.OutPut();
30 }
31 else
32 {
33 outString += $"""
34 ├─{Parent.AddObjectPlace()} {XFEConverter.OutPutTypeName(obj.Type)} {obj.Name}
35 {tabString}├────┬────────────────────────────
36 {obj.OutPut()}
37 {tabString}{currentConnectString}────────────────────────────────
38
39 """;
22 40 }
23 outString += obj.OutPut();
24 41 }
25 42 if (outString.Length > 0 && outString[^1] == '\n')
26 43 {
Modified XFEExtension.NetCore/XFETransform/SubObjectsBase.cs +5 -3
@@ -2,16 +2,18 @@
2 2
3 3 namespace XFEExtension.NetCore.XFETransform;
4 4
5 internal abstract class SubObjectsBase : ISubObjects
5 internal abstract class SubObjectsBase(List<IObjectInfo>? objectInfoList) : ISubObjects
6 6 {
7 protected readonly List<IObjectInfo> objectInfoList = [];
7 protected readonly List<IObjectInfo> objectInfoList = objectInfoList ?? [];
8 8
9 public IObjectInfo this[int index] { get => objectInfoList[index]; set => objectInfoList[index] = value;}
9 public IObjectInfo this[int index] { get => objectInfoList[index]; set => objectInfoList[index] = value; }
10 10
11 11 public int Count => objectInfoList.Count;
12 12
13 13 public bool IsReadOnly => false;
14 14
15 protected abstract ObjectInfo Parent { get; init; }
16
15 17 public void Add(IObjectInfo item) => objectInfoList.Add(item);
16 18
17 19 public void Clear() => objectInfoList.Clear();
Modified XFEExtension.NetCore/XFETransform/SubObjectsImpl.cs +4 -4
@@ -1,6 +1,6 @@
1 namespace XFEExtension.NetCore.XFETransform
1 namespace XFEExtension.NetCore.XFETransform;
2
3 internal class SubObjectsImpl(ObjectInfo parent, List<IObjectInfo>? objectInfoList = null) : SubObjects(objectInfoList)
2 4 {
3 internal class SubObjectsImpl : SubObjects
4 {
5 }
5 protected override ObjectInfo Parent { get; init; } = parent;
6 6 }
Modified XFEExtension.NetCore/XFETransform/XFEConverter.cs +4 -4
@@ -41,7 +41,7 @@ public class XFEConverter
41 41 {
42 42 if (IsBasicType(x))
43 43 return ConvertBasicTypeToCodeType(x.Name);
44 return x.Name;
44 return OutPutTypeName(x);
45 45 }))}>";
46 46 }
47 47
@@ -69,7 +69,7 @@ public class XFEConverter
69 69 {
70 70 if (type.IsAssignableTo(typeof(Array)))
71 71 {
72 var arrayObjects = new SubObjectsImpl();
72 var arrayObjects = new List<IObjectInfo>();
73 73 foreach (var item in (Array)value)
74 74 {
75 75 arrayObjects.Add(GetObjectInfo("数组成员", ObjectPlace.Array, layer + 1, item.GetType(), item, onlyProperty, onlyPublic));
@@ -78,7 +78,7 @@ public class XFEConverter
78 78 }
79 79 if (type.IsAssignableTo(typeof(IEnumerable)))
80 80 {
81 var enumerableObjects = new SubObjectsImpl();
81 var enumerableObjects = new List<IObjectInfo>();
82 82 foreach (var item in (IEnumerable)value)
83 83 {
84 84 enumerableObjects.Add(GetObjectInfo("列表成员", ObjectPlace.List, layer + 1, item.GetType(), item, onlyProperty, onlyPublic));
@@ -89,7 +89,7 @@ public class XFEConverter
89 89 {
90 90 return new ObjectInfoImpl(name, objectPlace, layer, type, false, value);
91 91 }
92 var subObjects = new SubObjectsImpl();
92 var subObjects = new List<IObjectInfo>();
93 93 foreach (var memberInfo in type.GetMembers((onlyPublic ? BindingFlags.Public : BindingFlags.NonPublic | BindingFlags.Public) | BindingFlags.Instance | BindingFlags.Static))
94 94 {
95 95 if (memberInfo is PropertyInfo propertyInfo)