V3.5.1
This commit is contained in:
parent
9949f795f1
commit
96b64900d8
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -45,15 +45,15 @@ namespace Sunny.UI.Demo
|
|||||||
|
|
||||||
private void btnStatus2_Click(object sender, EventArgs e)
|
private void btnStatus2_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ShowStatusForm(100, "数据加载中......", 0);
|
this.ShowStatusForm(100, "数据加载中......", 0);
|
||||||
for (int i = 0; i < 88; i++)
|
for (int i = 0; i < 88; i++)
|
||||||
{
|
{
|
||||||
SystemEx.Delay(50);
|
SystemEx.Delay(50);
|
||||||
SetStatusFormDescription("数据加载中(" + i + "%)......");
|
this.SetStatusFormDescription("数据加载中(" + i + "%)......");
|
||||||
StatusFormStepIt();
|
this.SetStatusFormStepIt();
|
||||||
}
|
}
|
||||||
|
|
||||||
HideStatusForm();
|
this.HideStatusForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnInfo_Click(object sender, EventArgs e)
|
private void btnInfo_Click(object sender, EventArgs e)
|
||||||
@ -197,18 +197,18 @@ namespace Sunny.UI.Demo
|
|||||||
|
|
||||||
private void uiSymbolButton11_Click(object sender, EventArgs e)
|
private void uiSymbolButton11_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ShowWaitForm("准备开始...");
|
this.ShowWaitForm("准备开始...");
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
SetWaitFormDescription(UILocalize.SystemProcessing + "20%");
|
this.SetWaitFormDescription(UILocalize.SystemProcessing + "20%");
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
SetWaitFormDescription(UILocalize.SystemProcessing + "40%");
|
this.SetWaitFormDescription(UILocalize.SystemProcessing + "40%");
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
SetWaitFormDescription(UILocalize.SystemProcessing + "60%");
|
this.SetWaitFormDescription(UILocalize.SystemProcessing + "60%");
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
SetWaitFormDescription(UILocalize.SystemProcessing + "80%");
|
this.SetWaitFormDescription(UILocalize.SystemProcessing + "80%");
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
SetWaitFormDescription(UILocalize.SystemProcessing + "100%");
|
this.SetWaitFormDescription(UILocalize.SystemProcessing + "100%");
|
||||||
HideWaitForm();
|
this.HideWaitForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void uiSymbolButton13_Click(object sender, EventArgs e)
|
private void uiSymbolButton13_Click(object sender, EventArgs e)
|
||||||
@ -222,9 +222,9 @@ namespace Sunny.UI.Demo
|
|||||||
|
|
||||||
private void uiSymbolButton12_Click(object sender, EventArgs e)
|
private void uiSymbolButton12_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ShowProcessForm(200);
|
this.ShowProcessForm(200);
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
HideProcessForm();
|
this.HideProcessForm();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -41,11 +41,11 @@
|
|||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="SunnyUI, Version=3.5.0.0, Culture=neutral, PublicKeyToken=27d7d2e821d97aeb, processorArchitecture=MSIL">
|
<Reference Include="SunnyUI, Version=3.5.1.0, Culture=neutral, PublicKeyToken=27d7d2e821d97aeb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SunnyUI.3.5.0\lib\net472\SunnyUI.dll</HintPath>
|
<HintPath>..\packages\SunnyUI.3.5.1\lib\net472\SunnyUI.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SunnyUI.Common, Version=3.5.0.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
|
<Reference Include="SunnyUI.Common, Version=3.5.1.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SunnyUI.Common.3.5.0\lib\net472\SunnyUI.Common.dll</HintPath>
|
<HintPath>..\packages\SunnyUI.Common.3.5.1\lib\net472\SunnyUI.Common.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="SunnyUI" version="3.5.0" targetFramework="net472" />
|
<package id="SunnyUI" version="3.5.1" targetFramework="net472" />
|
||||||
<package id="SunnyUI.Common" version="3.5.0" targetFramework="net472" />
|
<package id="SunnyUI.Common" version="3.5.1" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
@ -60,71 +60,6 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 颜色是否是浅色
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="color">颜色</param>
|
|
||||||
/// <returns>是否是浅色</returns>
|
|
||||||
public static bool IsLightColor(this Color color)
|
|
||||||
{
|
|
||||||
return (0.299 * color.R + 0.587 * color.G + 0.114 * color.B) / 255 > 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 根据背景色判断前景色
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="backColor">背景色</param>
|
|
||||||
/// <returns>前景色</returns>
|
|
||||||
public static Color ForeColor(Color backColor)
|
|
||||||
{
|
|
||||||
return backColor.IsLightColor() ? Color.Black : Color.White;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SizeF转Size
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="size">SizeF</param>
|
|
||||||
/// <returns>Size</returns>
|
|
||||||
public static Size Size(this SizeF size)
|
|
||||||
{
|
|
||||||
return new Size(size.Width.RoundEx(), size.Height.RoundEx());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// PointF转Point
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="point">PointF</param>
|
|
||||||
/// <returns>Point</returns>
|
|
||||||
public static Point Point(this PointF point)
|
|
||||||
{
|
|
||||||
return new Point(point.X.RoundEx(), point.Y.RoundEx());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Size增加长宽
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="size">Size</param>
|
|
||||||
/// <param name="width">宽</param>
|
|
||||||
/// <param name="height">长</param>
|
|
||||||
/// <returns>结果</returns>
|
|
||||||
public static Size Add(this Size size, int width, int height)
|
|
||||||
{
|
|
||||||
return new Size(size.Width + width, size.Height + height);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SizeF增加长宽
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="size">SizeF</param>
|
|
||||||
/// <param name="width">宽</param>
|
|
||||||
/// <param name="height">长</param>
|
|
||||||
/// <returns>结果</returns>
|
|
||||||
public static SizeF Add(this SizeF size, float width, float height)
|
|
||||||
{
|
|
||||||
return new SizeF(size.Width + width, size.Height + height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 点是否在区域内
|
/// 点是否在区域内
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -543,27 +478,6 @@ namespace Sunny.UI
|
|||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Color转HTML
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="color">Color</param>
|
|
||||||
/// <returns>HTML</returns>
|
|
||||||
public static string ToHTML(this Color color)
|
|
||||||
{
|
|
||||||
return ColorTranslator.ToHtml(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// HTML转Color
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="htmlColor">HTML</param>
|
|
||||||
/// <param name="alpha">透明度</param>
|
|
||||||
/// <returns>Color</returns>
|
|
||||||
public static Color ToColor(this string htmlColor, int alpha = 255)
|
|
||||||
{
|
|
||||||
return Color.FromArgb(alpha > 255 ? 255 : alpha, ColorTranslator.FromHtml(htmlColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 颜色是否为空
|
/// 颜色是否为空
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,167 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
|
|
||||||
namespace Sunny.UI
|
|
||||||
{
|
|
||||||
[Serializable]
|
|
||||||
public class UIObjectCollection : IList
|
|
||||||
{
|
|
||||||
private ArrayList data = new ArrayList();
|
|
||||||
|
|
||||||
public event EventHandler CountChange;
|
|
||||||
|
|
||||||
public object this[int index]
|
|
||||||
{
|
|
||||||
get => data[index];
|
|
||||||
set => data[index] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Count => data.Count;
|
|
||||||
|
|
||||||
bool IList.IsReadOnly => false;
|
|
||||||
|
|
||||||
bool IList.IsFixedSize => false;
|
|
||||||
|
|
||||||
public int Add(object value)
|
|
||||||
{
|
|
||||||
int count = data.Add(value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddRange(object[] value)
|
|
||||||
{
|
|
||||||
if (value == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("value is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
data.AddRange(value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Clear()
|
|
||||||
{
|
|
||||||
data.Clear();
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Contains(object value)
|
|
||||||
{
|
|
||||||
return data.Contains(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CopyTo(object[] array, int index)
|
|
||||||
{
|
|
||||||
data.CopyTo(array, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public UIObjectEnumerator GetEnumerator()
|
|
||||||
{
|
|
||||||
return new UIObjectEnumerator(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int IndexOf(object value)
|
|
||||||
{
|
|
||||||
return data.IndexOf(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Insert(int index, object value)
|
|
||||||
{
|
|
||||||
data.Insert(index, value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsReadOnly => false;
|
|
||||||
|
|
||||||
public bool IsSynchronized => false;
|
|
||||||
|
|
||||||
public void Remove(object value)
|
|
||||||
{
|
|
||||||
data.Remove(value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveAt(int index)
|
|
||||||
{
|
|
||||||
data.RemoveAt(index);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public object SyncRoot => data.SyncRoot;
|
|
||||||
|
|
||||||
object IList.this[int index]
|
|
||||||
{
|
|
||||||
get => this[index];
|
|
||||||
set => this[index] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
int IList.Add(object value)
|
|
||||||
{
|
|
||||||
int count = Add(value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IList.Contains(object value)
|
|
||||||
{
|
|
||||||
return Contains(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int IList.IndexOf(object value)
|
|
||||||
{
|
|
||||||
return IndexOf(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IList.Insert(int index, object value)
|
|
||||||
{
|
|
||||||
Insert(index, value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
void IList.Remove(object value)
|
|
||||||
{
|
|
||||||
Remove(value);
|
|
||||||
CountChange?.Invoke(this, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ICollection.CopyTo(Array array, int index)
|
|
||||||
{
|
|
||||||
data.CopyTo(array, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
|
||||||
{
|
|
||||||
return data.GetEnumerator();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <devdoc>
|
|
||||||
/// <para>[To be supplied.]</para>
|
|
||||||
/// </devdoc>
|
|
||||||
public class UIObjectEnumerator
|
|
||||||
{
|
|
||||||
private readonly IEnumerator baseEnumerator;
|
|
||||||
private readonly IEnumerable temp;
|
|
||||||
|
|
||||||
internal UIObjectEnumerator(UIObjectCollection mappings)
|
|
||||||
{
|
|
||||||
this.temp = (IEnumerable)(mappings);
|
|
||||||
this.baseEnumerator = temp.GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public object Current => baseEnumerator.Current;
|
|
||||||
|
|
||||||
public bool MoveNext()
|
|
||||||
{
|
|
||||||
return baseEnumerator.MoveNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Reset()
|
|
||||||
{
|
|
||||||
baseEnumerator.Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,203 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
|
|
||||||
* CopyRight (C) 2012-2023 ShenYongHua(沈永华).
|
|
||||||
* QQ群:56829229 QQ:17612584 EMail:SunnyUI@QQ.Com
|
|
||||||
*
|
|
||||||
* Blog: https://www.cnblogs.com/yhuse
|
|
||||||
* Gitee: https://gitee.com/yhuse/SunnyUI
|
|
||||||
* GitHub: https://github.com/yhuse/SunnyUI
|
|
||||||
*
|
|
||||||
* SunnyUI.dll can be used for free under the GPL-3.0 license.
|
|
||||||
* If you use this code, please keep this note.
|
|
||||||
* 如果您使用此代码,请保留此说明。
|
|
||||||
******************************************************************************
|
|
||||||
* 文件名称: UMapper.cs
|
|
||||||
* 文件说明: 轻量级的对象映射框架,可以映射值类型(包括Struct),和以值类型构成的List和数组。
|
|
||||||
* 当前版本: V3.1
|
|
||||||
* 创建日期: 2021-09-30
|
|
||||||
*
|
|
||||||
* 2021-09-30: V3.0.7 增加文件说明
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace Sunny.UI
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 轻量级的对象映射框架
|
|
||||||
/// </summary>
|
|
||||||
public static class Mapper
|
|
||||||
{
|
|
||||||
private static void Execute<T1, T2>(T1 source, T2 dest)
|
|
||||||
where T1 : class
|
|
||||||
where T2 : class
|
|
||||||
{
|
|
||||||
if (source == null || dest == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var listSource = source.GetType().GetNeedProperties().ToDictionary(prop => prop.Name);
|
|
||||||
var listDest = dest.GetType().GetNeedProperties().ToDictionary(prop => prop.Name);
|
|
||||||
|
|
||||||
foreach (var item in listDest)
|
|
||||||
{
|
|
||||||
if (listSource.NotContainsKey(item.Key)) continue;
|
|
||||||
|
|
||||||
var sourceInfo = listSource[item.Key];
|
|
||||||
Type sourceType = sourceInfo.PropertyType;
|
|
||||||
object sourceValue = sourceInfo.GetValue(source, null);
|
|
||||||
|
|
||||||
var destInfo = item.Value;
|
|
||||||
Type destType = item.Value.PropertyType;
|
|
||||||
|
|
||||||
if (!sourceType.Equals(destType)) continue;
|
|
||||||
if (sourceType.IsValueType)
|
|
||||||
{
|
|
||||||
//Console.WriteLine("ValueType: " + item.Key + ", " + sourceType.FullName);
|
|
||||||
destInfo.SetValue(dest, sourceValue, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (sourceType == typeof(string))
|
|
||||||
{
|
|
||||||
//Console.WriteLine("String: " + item.Key + ", " + sourceType.FullName);
|
|
||||||
destInfo.SetValue(dest, sourceValue, null);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sourceType.IsList())
|
|
||||||
{
|
|
||||||
//Console.WriteLine("List: " + item.Key + ", " + sourceType.FullName);
|
|
||||||
Type[] sourceTypes = sourceType.GetGenericArguments();
|
|
||||||
Type[] destTypes = destType.GetGenericArguments();
|
|
||||||
if (sourceTypes.Length != 1) continue;
|
|
||||||
if (destTypes.Length != 1) continue;
|
|
||||||
if (!sourceTypes[0].Equals(destTypes[0])) continue;
|
|
||||||
|
|
||||||
if (sourceValue == null)
|
|
||||||
{
|
|
||||||
destInfo.SetValue(dest, null, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Type typeDataList = typeof(List<>).MakeGenericType(destTypes[0]);
|
|
||||||
MethodInfo AddInfo = typeDataList.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
|
|
||||||
if (AddInfo == null) continue;
|
|
||||||
|
|
||||||
if (sourceTypes[0].IsValueType || sourceTypes[0] == typeof(string))
|
|
||||||
{
|
|
||||||
object listvalue = typeDataList.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { });
|
|
||||||
IEnumerable sourceList = sourceValue as IEnumerable;
|
|
||||||
foreach (var listItem in sourceList)
|
|
||||||
{
|
|
||||||
AddInfo.Invoke(listvalue, new[] { listItem });
|
|
||||||
}
|
|
||||||
|
|
||||||
destInfo.SetValue(dest, listvalue, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//暂时不考虑
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sourceType.IsArray)
|
|
||||||
{
|
|
||||||
//Console.WriteLine("Array: " + item.Key + ", " + sourceType.FullName);
|
|
||||||
if (sourceValue == null)
|
|
||||||
{
|
|
||||||
destInfo.SetValue(dest, null, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ICollection sourceList = sourceValue as ICollection;
|
|
||||||
Type type = sourceType.GetElementType();
|
|
||||||
var array = Array.CreateInstance(type, sourceList.Count);
|
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
foreach (var listItem in sourceList)
|
|
||||||
{
|
|
||||||
array.SetValue(listItem, index++);
|
|
||||||
}
|
|
||||||
|
|
||||||
destInfo.SetValue(dest, array, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sourceType.IsDictionary())
|
|
||||||
{
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//类没有无参构造函数的话,创建有问题
|
|
||||||
//if (sourceType.IsClass)
|
|
||||||
//{
|
|
||||||
// if (sourceValue == null)
|
|
||||||
// {
|
|
||||||
// destInfo.SetValue(dest, null, null);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// object obj = Activator.CreateInstance(sourceType, null);
|
|
||||||
// obj.MapperFrom(sourceValue);
|
|
||||||
// destInfo.SetValue(dest, obj, null);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// continue;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// T1映射到T2
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T1">T1</typeparam>
|
|
||||||
/// <typeparam name="T2">T2</typeparam>
|
|
||||||
/// <param name="source">源</param>
|
|
||||||
/// <param name="dest">目标</param>
|
|
||||||
public static void MapperTo<T1, T2>(this T1 source, T2 dest)
|
|
||||||
where T1 : class
|
|
||||||
where T2 : class
|
|
||||||
{
|
|
||||||
Execute(source, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// T1从T2映射
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T1">T1</typeparam>
|
|
||||||
/// <typeparam name="T2">T2</typeparam>
|
|
||||||
/// <param name="source">源</param>
|
|
||||||
/// <param name="dest">目标</param>
|
|
||||||
public static void MapperFrom<T1, T2>(this T1 dest, T2 source)
|
|
||||||
where T1 : class
|
|
||||||
where T2 : class
|
|
||||||
{
|
|
||||||
Execute(source, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取数组的类类型
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="t">类型</param>
|
|
||||||
/// <returns>类类型</returns>
|
|
||||||
public static Type GetArrayElementType(this Type t)
|
|
||||||
{
|
|
||||||
if (!t.IsArray) return null;
|
|
||||||
string name = t.FullName.Replace("[]", string.Empty);
|
|
||||||
return t.Assembly.GetType(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,7 +9,7 @@
|
|||||||
<Description>SunnyUI.Net 是基于.Net Framework 4.0~4.8、.Net6、.Net7 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。</Description>
|
<Description>SunnyUI.Net 是基于.Net Framework 4.0~4.8、.Net6、.Net7 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。</Description>
|
||||||
<Copyright>CopyRight © SunnyUI.Net 2012-2023</Copyright>
|
<Copyright>CopyRight © SunnyUI.Net 2012-2023</Copyright>
|
||||||
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||||
<Version>3.5.0.0</Version>
|
<Version>3.5.1.0</Version>
|
||||||
<Authors>ShenYonghua</Authors>
|
<Authors>ShenYonghua</Authors>
|
||||||
<Company>SunnyUI.Net</Company>
|
<Company>SunnyUI.Net</Company>
|
||||||
<PackageId>SunnyUI</PackageId>
|
<PackageId>SunnyUI</PackageId>
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<SignAssembly>False</SignAssembly>
|
<SignAssembly>False</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>D:\MyDocuments\Key\SunnyUI.pfx</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>D:\MyDocuments\Key\SunnyUI.pfx</AssemblyOriginatorKeyFile>
|
||||||
<DelaySign>False</DelaySign>
|
<DelaySign>False</DelaySign>
|
||||||
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||||
<GenerateDocumentationFile>False</GenerateDocumentationFile>
|
<GenerateDocumentationFile>False</GenerateDocumentationFile>
|
||||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@ -79,7 +79,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="SunnyUI.Common" Version="3.5.0" />
|
<PackageReference Include="SunnyUI.Common" Version="3.5.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user