您当前的位置: 首页 > 

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JHelpers——一个善良忠实的仆人

寒冰屋 发布时间:2019-09-03 23:17:48 ,浏览量:0

目录

介绍

背景

使用代码

ContextMgr代码示例

CommonHelpers API

扩展方法

帮助函数和属性

介绍

JHelpers是一个.NET Standard 2.0库组件,可以在任何支持的操作系统上与任何.NET项目(无论是Core还是Standard)一起使用。它是一个通常有用的方法和功能库,可以节省开发人员编写代码来完成这些平凡的任务——或者更糟糕的是,有多个版本的方法可以在多个地方编写相同的东西。出于这个原因,JHelpers在我的JDAC和JLogger NuGet包中使用。

通过搜索NuGet找到该组件Jeff.Jones.JHelpers,或直接访问:https://www.nuget.org/packages/Jeff.Jones.JHelpers/。

背景

我发现,随着时间的推移,正如许多开发人员所做的那样,我在多个项目中使用了某些辅助函数和简单的功能。因此,我将它们(从零开始重写,以便不使用为他人编写和拥有的代码)合并到库中。然后我通过在另外两个NuGet项目中使用这个库来“吃掉我自己的狗食”(可以这么说)。

CommonHelpers是一个有static方法和扩展的static类。

ContextMgr是一个线程安全的单例,可用于将数据存储在应用程序中的任何位置、任何线程访问的单个位置。一个典型的用途是存储设置和其他运行时值,因此它们的源(文件,数据库等)只需要读取一次。任何可以定义为唯一String 名称和任何类型的值或引用类型的东西都可以保留在那里。值作为String键名称(必须是唯一的)和任何值或引用类型添加,作为动态类型加框。

ContextMgr没有初始化,并且作为单例,不使用“new”来创建。实际实例是在代码中的第一个引用上动态创建的。

使用代码 ContextMgr代码示例
Boolean retVal = false;
ContextMgr.Instance.ContextValues.Add("Computer Name", Environment.MachineName);
ContextMgr.Instance.ContextValues.Add("Startup Time", DateTime.Now);
IPAddress[] ips = Dns.GetHostAddresses("BubbaComputer");
ContextMgr.Instance.ContextValues.Add("IP Addresses", ips);
dynamic machineName = "";
retVal = ContextMgr.Instance.ContextValues.TryGetValue("Computer Name", out machineName);
dynamic startupTime = "";
retVal = ContextMgr.Instance.ContextValues.TryGetValue("Startup Time", out startupTime);
dynamic hostAddresses = null;
retVal = ContextMgr.Instance.ContextValues.TryGetValue("IP Addresses", out hostAddresses);

// In your application’s shutdown code, I recommend adding this line so the
// ContextMgr disposes of its resources without waiting on the .NET garbage collector.

ContextMgr.Instance.Dispose();
CommonHelpers API

这是一个包含许多有用static方法的static类。

扩展方法
String GetFullExceptionMessage(this Exception ex2Examine, 
                               Boolean getDataCollection, 
                               Boolean getStackTrace)

此Exception对象扩展从父异常和堆栈中的任何异常(以及可选的数据集合)返回错误消息。该Exception.Data集合用于存储通常记录运行时值或其他重要数据以进行调试的名称——值对。

Boolean Contains(this String source, String toCheck, StringComparison strComp)

此String对象扩展允许string比较类型以string进行检查。如果toCheck string在string源代码中,则扩展方法返回true,否则返回false。

Int32 ContainsHowMany(this String source, String toCheck, Boolean ignoreCase = false)

此String对象扩展获取给定string在另一个string内发生的次数。扩展方法返回Count的0到n发生。

Boolean ConvertToBoolean(this String valueToExamine, out Boolean isBoolean)

此String对象扩展将string(假设为可转换的格式)转换为布尔值。识别为true(不区分大小写):true, on, yes, up, ok, good, 1, -1。识别为false(不区分大小写): false, off, no, down, not ok, bad, 0。如果转换失败,则返回false。检查isBoolean值以查看转换是否检测到布尔值。如果是false,则不转换该值。

Boolean IsBoolean(this String valueToExamine)

此String对象扩展测试一个 string,假定其为可以转换的格式,为一个布尔值。识别为true(不区分大小写):true, on, yes, up, ok, good, start, 1, -1。识别为false(不区分大小写): false, off, no, down, not ok, bad, stop, 0。如果转换失败,则返回false。否则,返回true。

Boolean IsOnlyDigits(this String testString, Boolean includePeriod = false)

此String对象扩展检查所有字符是否为数字。转换函数测试到数字可能会将字母转换为十六进制值。如果将唯一的一个期间视为一个数字,则includePeriod设置为true,以便正确处理十进制数string。

String GetOnlyDigits(this String testString, Boolean includePeriod = false)

此String对象扩展获取string中的所有数字,并忽略任何非数字。如果includePeriod是true,那么string结果中将包含第一个字符。

String GetOnlyLetters(this String testString, Boolean includeSpace = false)

此String对象扩展获取string中的所有字母并忽略任何非字母。但是,如果includeSpace是true,则找到的任何空格都包含在返回值中。

String GetOnlyLettersAndDigits(this String testString, BooleanincludePeriodAndSpace = false)

这个String对象扩展获得string中的所有字母和数字,而忽略一切,但当includePeriodAndSpace是true时,句点和空格除外。

Boolean IsOnlyLetters(this String testString, Boolean includeSpace = false)

此String对象扩展检查所有字符是否为字母。如果includeSpace是true,则接受空格,就好像它们是字母一样。

Boolean IsOnlyLettersAndOrDigits(this String testString, Boolean includePeriodAndSpace = false)

此String对象扩展检查所有字符仅为字母和数字。如果includePeriodAndSpace是true,那么所有句号和空格都被视为字母。

Boolean IsEmailFormat(this String email)

此String对象扩展检查string以查看它是否是有效的电子邮件格式。它不会检查它是否是有效的、可用的电子邮件。

DateTime GetDateTime(this String dateString, DateTime dateDefault)

此String对象扩展名转换string为date或返回默认时间值。

Decimal GetDecimal(this String numberString, Decimal decimalDefault)

此String对象扩展名将转换string为十进制值,或返回默认值。

Int32 GetInt32(this String numberString, Int32 integerDefault)

此String对象扩展转换string为Int32值,或返回默认值。

Int64 GetInt64(this String numberString, Int64 integerDefault)

此String对象扩展转换string为Int64值,或返回默认值。

Object GetDefaultValue(this Type t)

通用扩展方法,返回类型的默认值(如果存在)。这在default可能不起作用的泛型实例中很有用。

帮助函数和属性

枚举

DistanceUnitsOfMeasureEnum
    Unassigned
    Miles
    Kilometers
    Feet
    Meters

这与地理位置一起使用以指定距离的测量单位。

AddressGeoData
    Double Latitude1
    Double Longitude1
    Double Altitude1
    Double Latitude2
    Double Longitude2
    Double Altitude2
    Double LinearDistance (value is calculated, read-only)
    DistanceUnitsOfMeasureEnum UnitsOfMeasure

类构造函数

AddressGeoData(Double pLatitude1,
               Double pLongitude1,
               Double pAltitude1,
               Double pLatitude2,
               Double pLongitude2,
               Double pAltitude2,
               DistanceUnitsOfMeasureEnum pUnitsOfMeasure)

分类方法

void SetUnitsOfMeasure(DistanceUnitsOfMeasureEnum lngUnitsOfMeasure)

指定在此类实例化期间使用的测量单位。

void SetLinearDistance(Double dDistance)

此类用于存储指定纬度,经度和海拔高度的两个地理位置。测量单位确定与LinearDistance值对应的单位。如果不知道或不需要,海拔高度可为0。

String RowDelimiter (Get only)

此值可应用于常量的值。RowDelimiter是与电传打字机和其他设备中使用的非可打印ASCII字符相同,用于表示新行,并且不太可能在string数据中看到。

String ColumnDelimiter (Get only)

此值可应用于常量的值。ColumnDelimiter是与电传打字机和其他设备中使用的非可打印ASCII字符相同,用于表示新列,并且不太可能在string数据中看到。

String TableDelimiter (Get only)

此值可应用于常量的值。TableDelimiter是与电传打字机和其他设备中使用的非可打印ASCII字符相同,用于指示新的数据表,并且不太可能在string数据中看到。

String FullComputerName (Get only)

获取DNS将在任何域中识别的完整计算机名称。

String GetDNSName(String pComputerName = "")

获取给定计算机名称的DNS主机条目表名称。传入任何计算机名称。如果留空或null将使用当前计算机名称。

String CurDir (Get/Set)

获取或设置当前工作目录的标准路径。对于服务,当前目录通过常规方式显示Windows System32目录,因为该服务在位于那里的EXE下运行。此属性通过使用一个方法调用在IDE中运行,另一个用于运行已编译的方法来解决这个问题。

Boolean AmIRunningInTheIDE (Get only)

如果此项目或任何将此组件作为已编译代码调用的项目在IDE下运行,则此方法将返回true。如果没有使用IDE,则此方法返回false。

Boolean IsInDomain()

如果运行代码的计算机是一个域,则返回true。如果不是则返回False。

String GetComputerDomainName()

返回计算机加入的域。注意:如果用户以本地帐户登录,则仍会返回计算机域。如果已加入,则返回带有域名的String;如果不是,则返回空String。

String GetFullComputerDomainName()

返回完整的域名而不是别名。

Boolean IsDaylightSavingsTime(DateTime dtmToTest)

如果提供的datetime在夏令时期间内,则为True。

Boolean IsDaylightSavingsTime()

如果它是目前的夏令时,则返回True。

String CurrentTimeZoneDaylightName (Get only)

夏令时的当前时区名称。

String CurrentTimeZoneName (Get only)

无论夏令时如何,当前时区的名称。

Int32 Asc(String strChar)

与VB6 ASC函数相同——给它一个字符,返回ASCIII十进制数。

String Hex(Int32 lngValue)

与VB6函数相同。将32位整数转换为String hex值。

Int32 GetCurrentCPUUsage()

获取当前的%处理器时间。

Int32 AvailableRAMinMB()

返回可用的RAM MB。

PingReply Ping(String strHostName, Int32 lngTimeout)

同步ping指定的服务器。返回指示操作是否成功的PingReply实例。

void GetLinearDistances(ref List objAddressList)

此函数使用Haversine公式计算两组纬度和经度之间的线性距离,并根据纬度调整地球的半径。使用Haversine代替Vincenty的公式,以保持计算更简单,减少处理器密集度。此函数接受地址数据实例列表并处理它们,更新List线性距离属性中的各个类实例。

Double GetLinearDistance(double Latitude1,
                         double Longitude1,
                         double Altitude1,
                         double Latitude2,
                         double Longitude2,
                         double Altitude2,
                         DistanceUnitsOfMeasureEnum lngUnitsOfMeasure)

此函数使用Haversine公式计算两组纬度和经度之间的线性距离,并根据纬度调整地球的半径。使用Haversine代替Vincenty的公式,以保持计算更简单,减少处理器密集度。此重载允许调用者指定返回值所需的测量单位。

Double GetLinearDistance(Double Latitude1,
                         Double Longitude1,
                         Double Altitude1,
                         Double Latitude2,
                         Double Longitude2,
                         Double Altitude2,
                         Boolean UseMiles)

此函数使用Haversine公式计算两组纬度和经度之间的线性距离,并根据纬度调整地球的半径。使用Haversine代替Vincenty的公式,以保持计算更简单,减少处理器密集度。此重载允许用户在英里和公里(UseMiles参数)之间进行选择:

Double GetLinearDistance(Double Latitude1,
                         Double Longitude1,
                         Double Latitude2,
                         Double Longitude2,
                         DistanceUnitsOfMeasureEnum UnitsOfMeasure)

此函数使用Haversine公式计算两组纬度和经度之间的线性距离,但不提供高度(所有计算假定在海平面上的地球曲线上是线性的),并根据纬度调整地球半径。使用Haversine代替Vincenty的公式,以保持计算更简单,减少处理器密集度。此重载允许用户选择什么测量单位。

Double RadianToDegree(Double Coordinate)

将弧度转换为度数。

Double CelciusToFahrenheit(Double DegC)

将摄氏温度转换为华氏温度。

Double FahrenheitToCelsius(Double DegF)

将华氏温度转换为摄氏温度。

String StringToBase64(String String2Convert)

转换String为Base64。

String Base64ToString(String ByteString64)

转换Base64String为String。

List GetNetworkPrinters()

获取使用List对象中每个打印机一个ManagementObject实例的网络打印机列表。

void SetIntBitValue(ref Int32 intValue, Int32 bitPlaceValue, Boolean setBitOn)

Helper方法设置Int开/关的位值。 

Boolean GetIntBitValue(Int32 intValue, Int32 bitPlaceValue)

Helper方法获取一个Int位值的状态。

String GetStackInfo()

这将在String中获取模块,函数,行号和列号信息。在记录和创建异常以准确定义发生的位置时,这非常有用。

String GetStackInfo(Exception ex)

这将根据异常获取String中的模块,函数,行号和列号信息。在记录和创建异常以准确定义发生的位置时,这非常有用。

String GetFullDateTimeStampForFileName(DateTime dtmDate)

这将返回一个文件名的datetime格式一致的String。

Boolean IsFileText(out Encoding lngEncoding, String strFileName, Int32 lngNumCharactersToRead)

检测文件是否为文本并检测编码。

Int32 GetTotalHDDFreeSpace(String pDriveName)

返回可用磁盘空间的MB。

Int32 GetTotalHDDSize(String pDriveName)

返回总空间的MB。

Int32 GetMinPasswordLength()

返回域中的最小密码长度(如果存在)。如果不存在域,则返回-1。

Boolean IsIPAddress(String pValue, out IPAddress pIPValue)

检查一个string是IPv4还是IPv6地址,并返回IPAddress对象作为out参数。

String AssemblyTitle (Get only)

.NET程序集的标题。

String AssemblyVersion (Get only)

.NET程序集的版本。

String AssemblyDescription (Get only)

.NET程序集的说明。

String AssemblyProduct (Get only)

.NET程序集的产品说明。

String AssemblyCopyright (Get only)

.NET程序集使用的版权string。

String AssemblyCompany (Get only)

拥有.NET程序集的公司。

Boolean WriteToLog(String logFileName, String mainMessage, String secondMessage)

执行日志写入的方法,其中文件以制表符分隔并具有列标题行。

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0525s