C#编程学习11:几个常用的操作总结

简介: C#编程学习11:几个常用的操作总结

1 图像占据实际内存大小计算

图像占内存空间大小 = 分辨率 * 位深 / 8

分辨率=宽*高(如:1024*768,640*480)

位深:如24位,16位,8位

/8计算的是字节数。

例如:

一幅图像分辨率:1024*768,24位,则其大小计算如下:

大小=1024*768824/8=2359296byte=2304KB

2 输出包含日期的文件路径:

路径构成为:指定目录+当前日期+当前时分秒表示字符串+自定义字符串+文件后缀

string fileName = fileDir + "\\" + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString().Replace(":", "-") + "数据输出" + ".xls";

一些其他的操作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DATETIMEtest
{
    class Program
    {
        static void Main(string[] args)
        {
            //DateTime dt = DateTime.Now;
            DateTime dt = Convert.ToDateTime("2020-10-22 21:18:36");
            //获取今天是周几
            Console.WriteLine("Taday is  " + dt.DayOfWeek.ToString());
            //将周几的英文转化成数字
            Console.WriteLine("Taday is  " + dt.DayOfWeek.ToString("d"));
            Console.WriteLine("Taday is  " + int.Parse(dt.DayOfWeek.ToString("d")));
            //获取5天后是周几
            Console.WriteLine("5 天后是  " + dt.AddDays(5).DayOfWeek.ToString("d"));
            Console.WriteLine("5 天前是  " + dt.AddDays(-5).DayOfWeek.ToString("d"));
            //获取月初的信息
            Console.WriteLine("今天是这个月的第" + dt.Day + "天");
            Console.WriteLine("本月是" + dt.AddDays(1 - dt.Day).Month + "月");
            Console.WriteLine("本月有" + dt.AddDays(1 - dt.Day).AddMonths(1).AddDays(-1).Day + "天");
            //简单的方法
            //月初
            Console.WriteLine(dt.ToString("yyyy-MM-01"));
            //上月初
            Console.WriteLine(dt.AddMonths(-1).ToString("yyyy-MM-01"));
            Console.ReadKey();
        }
    }
}

3 编辑框控件以追加方式显示信息

txt_myString.Text = "";

txt_myString.AppendText ="";//以追加方式在编辑框控件中添加信息

此时建议将编辑框的MultiLine属性设置为True,将ScrollBars属性的滚动天设置为适当的格式

应用场景:以字符串形式输出程序的运行进度信息

4 根据指定字符串提取指定目录下所有符合要求的文件路径名

        /// <summary>
        /// 根据文件拓展名筛选满足要求的文件
        /// </summary>
        /// <param name="dir"></param 目录名称>
        /// <param name="selFileNames"></param 选定文件名集合>
        /// <param name="fileExtend"></param 待筛选文件拓展名>
        private void getFileNameByExtend(string dir, List<string> selFileNames, string fileExtend)
        {
            string[] fileNames = Directory.GetFiles(dir).Where(x => x.EndsWith(fileExtend)).ToArray();
            foreach (string str in fileNames)
            {
                selFileNames.Add(str);
            }
            DirectoryInfo[] directs = new DirectoryInfo(dir).GetDirectories();
            foreach (DirectoryInfo dr in directs)
            {
                getFileNameByExtend(dr.FullName, selFileNames, fileExtend);
            }
        }      

5 指定浮点数转化为字符串的位数

1. Convert.ToDouble(10.233333).ToString("N3");
2. //指定3为小数,以字符串形式输出

6 向文本中写数据流

StreamWriter s = new StreamWriter(address + "\\History.ini", true);//创建流写入器对象
s.WriteLine(openFileDialog1.FileName);//向文件中写入历史信息
s.Flush();//将信息压入流
s.Close();//关闭流

7 从文本中读取数据

StreamReader sr = new StreamReader(address + "\\History.ini", ,Encoding.GetEncoding("gb2312"));//确保中文文本可被识别
while (sr.Peek()>=0)//循环读取流中文本
{
    string data = sr.ReadLine());
}
sr.Close();

8 判断输入数据是否为数值

8.1 使用正则表达式的做法:

//此法缺陷在于只能转换正数,对于浮点数或科学技术法表述的字符串无法识别
public int IsNumeric(string str)
{
      int i;
      if(str != null && Regex.IsMatch(str,@"^\d+$"))
               i = int.Parse(str);
      else
                i = -1;
        return i;
} 

8.2正则表达式方案二

public static bool IsInt(string inString)
{
   Regex regex = new Regex("^[0-9]*[1-9][0-9]*$");
   return regex.IsMatch(inString.Trim());
}

8.3 不使用正则正则表达式的做法:

//判断函数
public bool IsNumeric(string s, out double result)
{
   bool bReturn = true;
   try
   {
        result = double.Parse(s);
   }
   catch
   {
        result = 0;
       bReturn = false;
   }
   return bReturn;      
}
//测试代码
string s1="abc";
string s2="-3.14159E+10";
double d1,d2;
bool ty1 = IsNumeric(s1,out d1);
bool ty2 = IsNumeric(s2,out d2);
//测试结果
ty1=false;d1=0;
ty2=true;d2=31415900000

8.4 常用的正则表达式总结

"^\\d+$"  //非负整数(正整数 + 0)  
"^[0-9]*[1-9][0-9]*$"  //正整数    
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)    
"^-[0-9]*[1-9][0-9]*$"  //负整数    
"^-?\\d+$"    //整数    
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)    
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"   
//正浮点数    
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)    
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"   
//负浮点数    
"^(-?\\d+)(\\.\\d+)?$"  //浮点数    
"^[A-Za-z]+$"  //由26个英文字母组成的字符串    
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串    
"^[a-z]+$"  //由26个英文字母的小写组成的字符串    
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串    
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串    
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址    
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url  
相关文章
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
43 3
|
2月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
15天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
62 12
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
73 4
|
4月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
56 2
|
3月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
3月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
162 0
|
4月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
89 11
|
4月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
61 1
|
8月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
89 0