常用的小方法 (c#)

本贴最后更新于 457 天前,其中的信息可能已经天翻地覆
  1. Json 数据转换成 DataTable

            /// <summary>
            /// Json数据转换成DataTable
            /// </summary>
            /// <remark>
            /// </remark>
            /// <param name="Json"></param>
            /// <param name="TableName"></param>
            /// <returns></returns>
            public DataTable JsonConvertToDataTable(String TableName, String Json)
            {
                DataTable dataTable = new DataTable();
                dataTable.TableName = TableName;
                JArray array = JsonConvert.DeserializeObject(Json) as JArray;
                if (array!=null && array.Count > 0)
                {
                    StringBuilder columns = new StringBuilder();
    
                    JObject objColumns = array[0] as JObject;
                    //构造表头
                    foreach (JToken jkon in objColumns.AsEnumerable<JToken>())
                    {
                        string name = ((JProperty)(jkon)).Name;
                        columns.Append(name + ",");
                        dataTable.Columns.Add(name);
                    }
                    //向表中添加数据
                    for (int i = 0; i < array.Count; i++)
                    {
                        DataRow row = dataTable.NewRow();
                        JObject obj = array[i] as JObject;
                        foreach (JToken jkon in obj.AsEnumerable<JToken>())
                        {
                            string name = ((JProperty)(jkon)).Name;
                            string value = ((JProperty)(jkon)).Value.ToString();
                            row[name] = value;
                        }
                        dataTable.Rows.Add(row);
                    }
                }
                return dataTable;
            }
    
  2. 将 JArray 转换为 datatable

            /// <summary>
            /// 将JArray转换为datatable
            /// </summary>
            /// <param name="dataArr"></param>
            /// <returns></returns>
            public DataTable JArrayToDatable(JArray dataArr)
            {
                if (dataArr == null || dataArr.Count <= 0) return null;
    
                DataTable result = new DataTable();
                var colnames = ((JObject)dataArr.First).Properties();
                List<string> columnNames = new List<string>();
    
                if (colnames == null) return null;
    
                foreach (var item in colnames)
                {
                    if (!columnNames.Contains(item.Name))
                    {
                        columnNames.Add(item.Name);
                    }
                    result.Columns.Add(item.Name, typeof(string));
                }
                foreach (JObject data in dataArr)
                {
                    JObject jo = JObject.Parse(data.ToString());
                    DataRow row = result.NewRow();
                    foreach (var columnName in columnNames)
                    {
                        if (jo.Property(columnName) == null)
                        {
                            data.Add(columnName, "");
                            row[columnName] = data[columnName].ToString();
                        }
                        else
                        {
                            row[columnName] = data[columnName].ToString();
                        }
                    }
                    result.Rows.Add(row);
                }
                return result;
            }
    
    
    
  3. DataTable 使用 Select 方法之后,把结果转换成 DataTable

            /// <summary> 
            /// 扩展DataTable Select结果为DataTable
            /// </summary> 
            /// <remark> 
            /// </remark>
            public DataTable DataTableSelect(this DataTable me, string where)
            {
                if (me == null || me.Rows.Count == 0)
                    return me;
    
                var dtNew = me.Clone();
                var drArray = me.Select(where);
    
                foreach (var item in drArray)
                    dtNew.Rows.Add(item.ItemArray);
    
                return dtNew;
            }
    
  4. .net core 读取 appsettings.json 配置

       	/// <summary>
            /// 读取配置信息
            /// </summary>
            /// <remarks>
            /// </remarks>
            /// <typeparam name="T"></typeparam>
            /// <param name="name"></param>
            /// <returns></returns>
            public static T Getconfig<T>(string name) where T : class, new()
            {
                IConfiguration config = new ConfigurationBuilder()
                    .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
                    .Build();
    
                var appconfig = new ServiceCollection()
                .AddOptions()
                .Configure<T>(config.GetSection(name))
                .BuildServiceProvider()
                .GetService<IOptions<T>>()
                .Value;
    
                return appconfig;
            }
    
  5. Socket 获取以太网 IP(会筛掉虚拟网卡) 👍

            /// <summary>
            /// 通过socket获取IP
            /// </summary>
            /// <returns></returns>
            public static string SocketGetIp() {
                string localIP = string.Empty;
                using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
                {
                    socket.Connect("8.8.8.8", 65530);
                    IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                    localIP = endPoint.Address.ToString();
                }
                return localIP;
            }
    
  6. Dns 获取 IP(只获取 IP V4 的外网 IP) 😄

    static void SocketGetIp() {
                string localIP = string.Empty;
                using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
                {
                    socket.Connect("8.8.8.8", 65530);
                    IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                    localIP = endPoint.Address.ToString();
                }
                Console.WriteLine("IP Address = " + localIP);
            }
    
  7. Network 获取外网 IP 😄

static void NetworkGetIp() {
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in nics)
            {
                bool Pd1 = (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet); //判断是否是以太网连接
                if (Pd1)
                {
                    Console.WriteLine("网络适配器名称:" + adapter.Name);
                    Console.WriteLine("网络适配器标识符:" + adapter.Id);
                    Console.WriteLine("适配器连接状态:" + adapter.OperationalStatus.ToString());


                    IPInterfaceProperties ip = adapter.GetIPProperties();     //IP配置信息
                    if (ip.UnicastAddresses.Count > 0)
                    {
                        Console.WriteLine("IP地址:" + ip.UnicastAddresses.Where(d => d.IsDnsEligible == true).FirstOrDefault().Address.ToString());
                        //Console.WriteLine("IP地址:" + ip.UnicastAddresses[0].Address.ToString());
                        Console.WriteLine("子网掩码:" + ip.UnicastAddresses[0].IPv4Mask.ToString());
                    }
                    if (ip.GatewayAddresses.Count > 0)
                    {
                        Console.WriteLine("默认网关:" + ip.GatewayAddresses[0].Address.ToString());   //默认网关
                    }
                    int DnsCount = ip.DnsAddresses.Count;
                    Console.WriteLine("DNS服务器地址:");   //默认网关
                    if (DnsCount > 0)
                    {
                        //其中第一个为首选DNS,第二个为备用的,余下的为所有DNS为DNS备用,按使用顺序排列
                        for (int i = 0; i < DnsCount; i++)
                        {
                            Console.WriteLine("              " + ip.DnsAddresses[i].ToString());
                        }
                    }
                    Console.WriteLine("网络接口速度:" + (adapter.Speed / 1000000).ToString("0.0") + "Mbps");
                    Console.WriteLine("接口描述:" + adapter.Description);
                    Console.WriteLine("适配器的媒体访问控制 (MAC) 地址:" + adapter.GetPhysicalAddress().ToString());

                    Console.WriteLine("该接口是否只接收数据包:" + adapter.IsReceiveOnly.ToString());

                    Console.WriteLine("该接口收到的字节数:" + adapter.GetIPv4Statistics().BytesReceived.ToString());
                    Console.WriteLine("该接口发送的字节数:" + adapter.GetIPv4Statistics().BytesSent.ToString());

                    Console.WriteLine("该接口丢弃的传入数据包数:" + adapter.GetIPv4Statistics().IncomingPacketsDiscarded.ToString());
                    Console.WriteLine("该接口丢弃的传出数据包数:" + adapter.GetIPv4Statistics().OutgoingPacketsDiscarded.ToString());

                    Console.WriteLine("该接口有错误的传入数据包数:" + adapter.GetIPv4Statistics().IncomingPacketsWithErrors.ToString());
                    Console.WriteLine("该接口有错误的传出数据包数:" + adapter.GetIPv4Statistics().OutgoingPacketsWithErrors.ToString());

                    Console.WriteLine("该接口协议未知的数据包数:" + adapter.GetIPv4Statistics().IncomingUnknownProtocolPackets.ToString());
                    Console.WriteLine("---------------------------------------------------------------------\n");
                }

            }
        }
1 操作
Jacky1994 在 2023-09-21 13:24:11 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 161 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 16 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖 • 1 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 319 关注
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 511 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 672 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    313 引用 • 547 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 281 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 559 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 14 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    55 引用 • 85 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    135 引用 • 190 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 3 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 370 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 76 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 6 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    288 引用 • 4485 回帖 • 664 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 584 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 535 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 101 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注