常用的小方法 (c#)

本贴最后更新于 305 天前,其中的信息可能已经天翻地覆
  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 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 6 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 238 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 348 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 149 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 140 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 反馈

    Communication channel for makers and users.

    124 引用 • 907 回帖 • 223 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 613 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 616 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 146 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    386 引用 • 1226 回帖 • 593 关注
  • 星云链

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

    3 引用 • 16 回帖 • 1 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    4 引用 • 91 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖
  • gRpc
    11 引用 • 9 回帖 • 49 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 30 关注
  • 前端

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

    247 引用 • 1347 回帖 • 1 关注
  • CodeMirror
    1 引用 • 2 回帖 • 125 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 442 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    165 引用 • 1474 回帖