XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
README.md
+18
-0
Added
XFEExtension.NetCore.Analyzer.Test/Program.cs
+15
-0
Modified
XFEExtension.NetCore.Analyzer.Test/TestClass.cs
+9
-16
Modified
XFEExtension.NetCore/XFEExtension.NetCore.csproj
+4
-3
Modified
XFEExtension.NetCore/XFETransform/ObjectInfo.cs
+5
-16
Modified
XFEExtension.NetCore/XFETransform/ObjectInfoImpl.cs
+1
-1
Modified
XFEExtension.NetCore/XFETransform/SubObjects.cs
+23
-6
Modified
XFEExtension.NetCore/XFETransform/SubObjectsBase.cs
+5
-3
Modified
XFEExtension.NetCore/XFETransform/SubObjectsImpl.cs
+4
-4
Modified
XFEExtension.NetCore/XFETransform/XFEConverter.cs
+4
-4
XFEstudio/XFEExtension
fix-修复部分XFETransform的部分已知问题
85dc7fc
代码差异
10 个文件
+88
-53
@@ -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
#### 最简单的用法
@@ -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
}
@@ -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
}
@@ -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
@@ -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
}
@@ -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
}
@@ -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
{
@@ -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();
@@ -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
}
@@ -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)