C#开发中一些常用的工具类分享

一、配置文件读写类

用于在开发时候C#操作配置文件读写信息

  • 1、工具类 ReadIni 代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace TcpServer
{
    public class ReadIni
    {
        [DllImport("kernel32")]// 读配置文件方法的6个参数:所在的分区(section)、 键值、     初始缺省值、   StringBuilder、  参数长度上限 、配置文件路径
        public static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder retVal, int size, string filePath);
        [DllImport("kernel32")]//写入配置文件方法的4个参数:  所在的分区(section)、  键值、     参数值、       配置文件路径
        private static extern long WritePrivateProfileString(string section, string key, string value, string filePath);

        public static string FileNmae = "SysConfig.ini";
        /*读配置文件*/
        public static string GetValue(string section, string key)
        {          

            string fileName = Directory.GetCurrentDirectory() + "/" + ReadIni.FileNmae;
            if (File.Exists(fileName))  //检查是否有配置文件,并且配置文件内是否有相关数据。
            {
                StringBuilder sb = new StringBuilder(255);               
                GetPrivateProfileString(section, key, "配置文件不存在,读取未成功!", sb, 255, fileName);
                return sb.ToString();
            }
            else
            {
                return string.Empty;
            }
        }

        /*写配置文件*/
        public static void SetValue(string section, string key, string value)
        {            
            string fileName = Directory.GetCurrentDirectory() + "/" + ReadIni.FileNmae;
            WritePrivateProfileString(section, key, value, fileName); // 路径会自动创建
        }
    }
}
  • 2、使用方法
// 自定义配置文件名称  
ReadIni.FileNmae ="Config.ini"; // 默认SysConfig.ini
// 设置配置文件内容
 ReadIni.SetValue("配置", "测试","王小宝好");
 // 读取配置文件内容
 string value = ReadIni.GetValue("配置","测试");

3、效果
在这里插入图片描述

二、日志记录类

在项目开发中我们经常要对业务进行日志记录,方便出现问题后对于故障的排查。这里我们使用C#实现了简单的日志记录功能。

  • 1、日志记录类代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TcpServer
{
    public class Logger
    {
        private string logPath;
        private string DirPath;

        public Logger(string path)
        {
            DirPath = path;
        }
        public Logger()
        {
            DirPath = Directory.GetCurrentDirectory()+"/logs/"+DateTime.Now.ToString("yyyyMMdd");            
        }

        public void LogInfo(string message)
        {
            if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }
            logPath = DirPath + "/log-info.log";
            Log("INFO", message);
        }

        public void LogWarning(string message)
        {
            if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }
            logPath = DirPath + "/log-warning.log";
            Log("WARNING", message);
        }

        public void LogError(string message)
        {
            if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }
            logPath =DirPath+ "/log-error.log";
            Log("ERROR", message);
        }

        private void Log(string level, string message)
        {
            string logEntry = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} - {level} - {message}{Environment.NewLine}";
            File.AppendAllText(logPath, logEntry);
        }
    }
}

  • 2、使用方法
Logger Log = new Logger();
Log.LogInfo("记录一条日志信息");
Log.LogWarning("记录警告日志");
Log.LogError("记录错误日志");
  • 3、记录效果
    在这里插入图片描述

三、数据缓存类

数据缓存类是一个用C#实现的对数据进行缓存的简单功能

  • 1、数据缓存类实现代码
using System;
using System.Collections.Generic;

namespace TcpServer
{

    public class CacheHelper<TKey, TValue>
    {
        private readonly Dictionary<TKey, CachedItem> _cache = new Dictionary<TKey, CachedItem>();      

        public CacheHelper()
        {
            
        }

        public void Set(TKey key, TValue value,int tTime= 3600)
        {
            _cache[key] = new CachedItem { ExpTime= TimeSpan.FromSeconds(tTime), Created = DateTime.UtcNow, Value = value };
        }
       



        public bool TryGet(TKey key, out TValue value)
        {
            CachedItem cachedItem;
            if (_cache.TryGetValue(key, out cachedItem) && cachedItem.IsValid)
            {
                value = (TValue)cachedItem.Value;
                return true;
            }
            value = default(TValue);
            return false;
        }

        public bool Remove(TKey key)
        {
            return _cache.Remove(key);
        }

        public void Clear()
        {
            _cache.Clear();
        }

        // 辅助类,用于跟踪缓存项的创建时间和有效期
        private class CachedItem
        {
            public TimeSpan ExpTime { get; set; }
            
            public DateTime Created { get; set; }
            
            public object Value { get; set; }

            public bool IsValid
            {
                get
                {
                    return DateTime.UtcNow - Created < ExpTime;
                }
            }
        }
    }
}
  • 2、使用方法
 CacheHelper<string, object> cache = new CacheHelper<string, object>(); 
 // 设置缓存  缓存20秒 
 cache.Set("key1", "value1",20);
 // 读取缓存
  object value = string.Empty;
  if (cache.TryGet("key1", out  value))
  {      
      return value;
  }
  
  • 3、使用效果需要用心体会

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WorldWind是一个开源的虚拟地球地图引擎,可用于创建即时更新的全球地图。在进行WorldWind的二次开发之前,需要先了解其基本概念和使用方法。 首先,需要下载和安装WorldWind的开发工具包,其包括WorldWind的核心库和其他必要的文件。安装完成后,可以通过编写Java代码来访问WorldWind的功能。 在二次开发过程常用的功能包括地图显示、地理信息查询和图层管理。通过设置视图参数,可以显示全球或特定区域的地图。可以使用不同的图层来显示地形、地名、卫星图像等信息。地理信息查询可以通过坐标或名称来获取特定位置的详细信息。 在进行地图显示时,可以通过添加标记、路径和多边形等元素来增强地图的可视化效果。标记可以是自定义的图标,路径可以用于显示运动轨迹,多边形可以用于标示特定区域。 此外,还可以通过与其他库和API的集成来扩展WorldWind的功能。例如,可以使用JavaScript库来创建交互式的地图应用程序;可以使用数据接口来获取实时的地理信息。 在进行二次开发时,需要遵循WorldWind的开发指南和文档,以确保程序的正确运行。可以参考官方的示例代码和教程来学习和理解WorldWind的使用方法。 总之,WorldWind的二次开发提供了丰富的地图功能和扩展性,可以满足各种地理信息需求。通过深入学习和理解WorldWind的开发指南,可以开发出高效、可定制的地图应用程序。 ### 回答2: WorldWind二次开发是指在使用WorldWind引擎的基础上,进行定制化开发,以满足特定需求或添加新功能。以下是一些WorldWind二次开发的指南: 1. 熟悉WorldWind引擎:在开始二次开发之前,需要了解WorldWind引擎的基本概念和功能,包括地图渲染、图层管理、场景管理等。可以通过阅读官方文档、教程和示例代码来学习。 2. 需求分析和设计:在开始开发之前,需要明确自己的需求,并进行详细的需求分析和功能设计。确定需要添加或修改的功能点,并考虑如何与现有的WorldWind引擎进行集成。 3. 使用开发工具:在进行WorldWind二次开发时,可以使用一些开发工具来提高效率。比如,可以使用Java IDE(如Eclipse或IntelliJ IDEA)来编写代码,使用版本控制工具(如Git)来管理代码。 4. 学习和使用WorldWind的API:WorldWind提供了丰富的API,通过使用这些API,可以进行地图渲染、图层管理、场景管理等操作。可以通过官方文档和示例代码学习和理解API的用法。 5. 编写自定义功能代码:根据需求和设计,开始编写自定义功能的代码。可以通过扩展现有的WorldWind类或实现自定义的类来实现功能。在编写代码时,可以使用WorldWind提供的API进行地图操作、图层管理、数据处理等。 6. 调试和测试:在开发过程,经常进行调试和测试,以确保代码的正确性和稳定性。可以使用调试工具(如断点调试)来跟踪代码的执行,同时编写单元测试来验证功能的正确性和稳定性。 7. 文档和代码管理:在开发完成后,应该编写文档来描述二次开发的功能和使用方法。同时,要注意对代码进行版本控制,确保代码的安全性和可维护性。 总之,进行WorldWind二次开发需要熟悉WorldWind引擎和API,进行需求分析和设计,编写自定义功能代码,并进行调试和测试。通过这些步骤,可以实现定制化的地图应用或添加特定的功能。 ### 回答3: WorldWind是一个开源的地理信息系统(GIS)软件开发工具包,它提供了一些强大的地理数据可视化和地理空间分析功能。WorldWind的二次开发指南主要包括以下几个方面的内容: 1. 安装和配置:首先,你需要从WorldWind官方网站下载WorldWind SDK,并按照官方文档的指导进行安装和配置。安装完毕后,你需要设置开发环境,确保项目能够正确编译和运行。 2. 开发环境:WorldWind提供了多种开发环境的支持,包括Java、C#和Web。你可以根据自己的需求选择合适的开发环境,并学习相应的开发技术和工具。例如,如果你选择Java开发环境,你需要了解Java语言和相关的开发框架和工具。 3. API使用:WorldWind提供了丰富的API,用于在你的应用程序实现地理数据的可视化和地理空间分析功能。你需要学习并熟悉这些API的使用方法,了解如何加载地理数据、创建地图和图层、处理用户交互等。官方文档提供了详细的API说明和示例代码,你可以参考官方文档进行学习和实践。 4. 示例代码和教程:WorldWind官方网站上提供了一些示例代码和教程,帮助你快速上手并理解WorldWind的使用方法。你可以根据示例代码学习如何实现一些常见的功能,如地图的显示和浏览、地理数据的查询和分析等。同时,你也可以通过教程了解更深入的开发技巧和应用场景。 5. 社区支持:WorldWind拥有一个活跃的开发者社区,你可以在官方论坛或其他相关社区寻求帮助和交流经验。在社区,你可以提问问题、分享经验、参与开源项目等,与其他开发者一起学习和进步。 总之,要进行WorldWind的二次开发,你需要安装和配置开发环境,并学习相应的开发技术和工具。你还需要熟悉WorldWind的API,掌握如何使用它实现地理数据的可视化和地理空间分析。除此之外,你也可以借助示例代码、教程和社区支持来加快学习和开发的进程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值