本人积累了十年的C#数据转换代码,包含字符串、数值、日期、生日/年龄、大写金额、图像、数据流、空值等转换。在多年项目开发中经过不断更新,遇到的bug也都修正,写程序的时候会非常方便快捷,而且会减少大量不必要的条件判断避免出错。尤其一些常用转换可以不考虑数据类型直接操作而不出错。可以在项目中直接引用,都是静态方法,不需要实例化。类名称使用ConvertValue或者Cvt都可以。
常用方法举例:
object value = 23;
string txt = Cvt.ToS(value);//任意数据转字符串,如果是空值则返回空字符""
txt = Cvt.ToString(value, "abc");//如果是空值则返回abc
int i = Cvt.ToInt(value);//如果不是数值或者是空值则返回0
i = Cvt.ToInt(value, 10);//如果不是数值或者是空值则返回10
double d = Cvt.ToDouble(value);
string date = Cvt.Date10(DateTime.Now);//日期格式2020-01-01
date = Cvt.Date19(DateTime.Now);//日期格式2020-01-01 13:25:10.
//在数据库操作中尽量用这种格式的字符串保存时间,
//否则有可能因为操作系统日期格式不同出错,比如中间穿插着星期。
date = Cvt.Date14(DateTime.Now);//格式20200101132510,可用于生成单号
if (Cvt.IsNull(value)) ;//判断是否空值(Null、DBNull.Value、"")
if (Cvt.IsNumber(value)) ;//判断是否数值
if (Cvt.IsDate(value)) ;//判断是否日期
int age = Cvt.ToAge("1999-01-20");//生日转年龄
Image image = null;
byte[] data = Cvt.ImageToStream(image, ImageFormat.Jpeg);//图像转数据流,可以保存到数据库
image = Cvt.StreamToImage(data);//数据流转图像,可用于从数据库读取图像
string imgString = Cvt.ImageToStringBase64(image);//图像转字符串,可以保存到数据库或者文本文件
image = Cvt.StringBase64ToImage(imgString);//字符串转图像
image = Cvt.ImageSize(image, 200, 300);//改变图像尺寸
txt = Cvt.PadLeftBytes(txt, 10, '*');//根据指定字节长度在左边填充字符
txt = Cvt.PadRightBytes(txt, 10, '*');//根据指定字节长度在右边填充字符
txt = Cvt.ByteToString(data);//数据流转字符串
部分源代码(完整源代码请下载使用):
/// <summary>
/// 转换为字符串(ToString的简写)。如空值则返回""
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string ToS(object value)
{
if (value == null || value == DBNull.Value)
return "";
else
return value.ToString();
}
/// <summary>
/// 将日期转换为字符串。格式:yyyy-MM-dd
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static string Date10(object date)
{
if (IsDate(date))
return Date10(ToDateTime(date));
else
return "";
}
/// <summary>
/// 将日期转换为字符串。格式:yyyy-MM-dd
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static string Date10(DateTime date)
{
if (date == null)
return "";
else
return date.ToString("yyyy-MM-dd");
}
/// <summary>
/// 转换为double。如空值则返回0
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static double ToDouble(object value)
{
double excode = 0;
if (IsNotNull(value))
{
double.TryParse(value.ToString(), out excode);
}
return excode;
}
/// <summary>
/// 将图像保存到数据流
/// </summary>
/// <param name="img">图像</param>
/// <param name="format">图像格式</param>
/// <returns>数据流</returns>
public static byte[] ImageToStream(Image img, ImageFormat format)
{
if (img == null)
return null;
MemoryStream ms = new MemoryStream();
Image imNew = new Bitmap(img);
imNew.Save(ms, format);
byte[] bytes = ms.ToArray();
ms.Close();
return bytes;
}
/// <summary>
/// 将数据流转成图像
/// </summary>
/// <param name="datas">数据流</param>
/// <returns>图像</returns>
public static Image StreamToImage(byte[] datas)
{
if (datas == null)
return null;
Image img = null;
try
{
MemoryStream ms = new MemoryStream(datas);
if (datas[0] == 0)
{
BinaryFormatter binFormatter = new BinaryFormatter();
img = (Image)binFormatter.Deserialize(ms);
}
else
{
img = Image.FromStream(ms, true);
}
ms.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return img;
}
/// <summary>
/// 检查是否空值(Null、DBNull.Value、"")
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static bool IsNullOrEmpty(object value)
{
if (value == null || value == DBNull.Value || value.ToString() == "")
return true;
else
return false;
}
/// <summary>
/// 当前值是否数值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static bool IsNumber(object value)
{
decimal v = 0;
if (IsNullOrEmpty(value) == false && decimal.TryParse(value.ToString(), out v))
{
return true;
}
else
return false;
}
/// <summary>
/// 根据指定字节长度在右边填充字符
/// </summary>
/// <param name="text">原始字符串</param>
/// <param name="maxTrueLength">字节长度</param>
/// <param name="chrPad">填充字符</param>
/// <returns></returns>
public static string PadRightBytes(string text, int maxTrueLength, char chrPad)
{
string strNew = text;
if (text == null || maxTrueLength <= 0)
{
return strNew;
}
int trueLen = Encoding.Default.GetBytes(text).Length;//字节长度
if (trueLen < maxTrueLength)
{
strNew = strNew.PadRight(maxTrueLength - trueLen + text.Length, chrPad);
}
return strNew;
}