1.Enum.TryParse<TEnum> 方法 (String, Boolean, TEnum%)

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。  用于指示转换是否成功的返回值。

命名空间:   System
   程序集:   mscorlib(在 mscorlib.dll 中)

语法

C#

public static bool TryParse<TEnum>(   string value,   bool ignoreCase,
out TEnum result
)where TEnum : struct, new()类型参数
TEnum
要将 value 转换为的枚举类型。
参数
value
类型:System.String
要转换的枚举名称或基础值的字符串表示形式。
ignoreCase
类型:System.Boolean                true表示不区分大小写;false 表示区分大小写。
result
类型:TEnum%
此方法在返回时包含一个类型为 TEnum 的一个对象,其值由 value 表示。  该参数未经初始化即
被传递。
返回值
类型:System.Boolean如果 value 参数成功转换,则为 true;否则为 false。

异常:ArgumentException TEnum 不是枚举类型。

备注:

TryParse<TEnum>(String, Boolean, TEnum)   与 Parse(Type, String, Boolean) 方法完全相同,不同之处在于转换失败时,返回 false,而不引发异常。  它消除了在分析的枚举值字符串表示形式时对异常处理的需要。

value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。  如果 value 包含多个命名常数或值,则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。  如果 value 是一个列表,则 result 反映了指定名称的值或与位 OR 运算合并的基础值。  如果 value 是枚举值名称的字符串表示形式,则 value 与枚举名称的比较取决于 ignoreCase 参数。  如果为 true,则比较为不分大小写的;如果为 false,则为区分大小写的。

如果 value 是一个不对应 TEnum 的命名常数的名称,则该方法将返回 false。  如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式,则此方法将返回基础值是已转换为整型的 value 的枚举成员。  如果不希望此行为发生,则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。

举例:

下面的示例定义 Colors 枚举,调用 TryParse<TEnum>(String, Boolean, TEnum) 方法将字符串转换为其对应的枚举值,并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。  在尝试将命名常数的字符串表现形式转换为其等效的枚举值时,TryParse<TEnum>(String, Boolean, TEnum) 方法将使用不区分大小写的比较。

using System;[Flags]enum Colors { None = 0, Red = 1, Green = 2, Blue = 4 };public class Example
{   public static void Demo(System.Windows.Controls.TextBlock outputBlock){      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };    foreach (string colorString in colorStrings){Colors colorValue;     if (Enum.TryParse(colorString, true, out colorValue))      if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))outputBlock.Text += String.Format("Converted '{0}' to {1}.",colorString, colorValue.ToString()) + "\n";           elseoutputBlock.Text += String.Format("{0} is not an underlying value of theColors enumeration.", colorString) + "\n";        elseoutputBlock.Text += String.Format("{0} is not a member of the Colors enumeration.", colorString) + "\n";}}
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value(潜在的值) of the Colors enumeration.
//       Converted 'blue' to Blue.
//      Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

备注:摘自:https://technet.microsoft.com/zh-CN/library/dd991317(v=vs.95)

2.int.tryParse

TryParse():

有时候我们需要把string类型转换成int类型,经常用int.Parse(),但是我觉得不如用int.TryParse(),因为int.Parse()会抛出异常如果有错误,如果避免就需要用判断string参数是不是有效,而int.TryParse()却不需要,他会返回true还是false,当false的时候我们还可以设定默认值。个人觉得用int.TryParse()更好下面代码写用法

看下写法:

            //此时会返回falsestring Str = "122a";         int Number = int.TryParse(Str,outNumber) ? Number : -1;   //返回true的结果string Strr = "12345";          int Numberr = int.TryParse(Strr, outNumberr) ? Numberr : -1;Console.WriteLine("第一个:{0}", Number);Console.WriteLine("第二个:{0}", Numberr);

3.DateTime.TryParse

将日期和时间的指定字符串表示形式转换为其 DateTime 等效项,并返回一个指示转换是否成功的值。

命名空间:   System
   程序集:   mscorlib(在 mscorlib.dll 中)

public static bool TryParse(
string s,
out DateTime result
)
参数
s
类型:System.String
包含要转换的日期和时间的字符串。
result
类型:System.DateTime%
当此方法返回时,如果转换成功,则包含与 s 中包含的日期和时间等效的 DateTime 值;
如果转换失败,则为 DateTime.MinValue。 如果 s 参数为 null、空字符串或者不包含日期和时间的有效字符串表示形式,转换将失败。该参数未经初始化即被传递。
返回值
类型:System.Boolean
如果 s 参数成功转换,则为 true;否则为 false

TryParse   方法类似于 Parse 方法,不同之处在于 TryParse 方法在转换失败时不引发异常。

字符串 s 是使用 DateTimeFormatInfo 对象中的格式设置信息分析的,该对象由当前区域性提供。

s 参数所包含的日期和时间的表示形式必须使用当前区域性的 DateTimeFormatInfo 对象所识别

的格式之一。

此方法尝试忽略无法识别的数据,如果可能,会用当前日期填充缺少的月、日和年份信息。  如果 s 只包含日期而没有时间,则此方法假设时间为午夜 12:00。  如果 s 包括只有两位数的年份的日期组件,它将转换为基于 Calendar.TwoDigitYearMax 属性值的当前区域性的当前日历一年的值。    s 中的所有前导、内部或尾部空白字符均会被忽略。

由于 DateTime.TryParse(String, DateTime) 方法尝试使用当前区域性的格式设置规则来分析日期和时间的字符串表示形式,因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。  如果要跨不同的区域设置分析特定的日期和时间格式,请使用 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 方法或 TryParseExact 方法的重载之一,并提供格式说明符。

如果 s 没有包含任何时区信息,则在方法返回时 result 包含一个 Kind 属性为 DateTimeKind.Unspecified 的 DateTime 值。  如果要分析的字符串包含时区信息,则在方法返回时 result  包含一个 Kind 属性为 DateTimeKind.Local 的 DateTime值。

示例:

下面的示例将多个日期和时间字符串传递给 DateTime.TryParse(String, DateTime) 方法。

string[] dateStrings = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8", "2009-05-01T14:57:32.8375298-04:00", "5/01/2008 14:57:32.80 -07:00", "1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM", "Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;outputBlock.Text += String.Format("Attempting to parse strings using {0} culture.",CultureInfo.CurrentCulture.Name) + "\n";foreach (string dateString in dateStrings){  if (DateTime.TryParse(dateString, out dateValue))outputBlock.Text += String.Format("  Converted '{0}' to {1} ({2}).",dateString, dateValue, dateValue.Kind) + "\n";  elseoutputBlock.Text += String.Format("  Unable to parse '{0}'.", dateString) + "\n";}
// The example displays the following output:
//    Attempting to parse strings using en-US culture.
//       Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
//       Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
//       Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
//       Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
//       Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified)
//       Unable to parse '16-05-2009 1:00:32 PM'.
//       Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).

备注:摘自:https://msdn.microsoft.com/zh-cn/library/ch92fbc1(VS.95).aspx

4.转自另外一位博友的总结:

在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法:分别为(int)、int.Parse()、int.TryParse()和Convert.ToInt32(),那么这四种方法对被转换对象有什么限制,以及各自之间有什么区别呢?相信很多童鞋也不能完全说清楚。

下面从被转换对象说起,在我们实际开发项目的过程中,我们碰到需要被转换的类型大概有3大类,分别是空值(NULL)、数字类型(包含float,double,int,long等)和字符串(string)这3类。

先看第一种情况:NULL,采用如下代码进行测试:

int a = Convert.ToInt32(null);
int b;
bool rlt = int.TryParse(null, out b);
int c = int.Parse(null);
int d = (int)null;

很明显,在运行之前VS就会在最后一句报错:“Cannot convert null to 'int' because it is a non-nullable value type”,这是说不能将NULL转换为INT因为INT是一个非空值类型,然后注释掉最后一句,再运行一下,发现这一句(int c = int.Parse(null);)会报如下错误:“Value cannot be null.”,值不能为空,a和b分别返回0,rlt为false;

然后继续看第二种情况:数字类型(主要测试double和long类型),先将代码修改如下:

double m = 1.232d;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;

然后运行一下,发现这一句(int c = int.Parse(m.ToString());)会报错:“Input string was not in a correct format.”,输入的字符串格式不正确,注释掉这一句然后运行,然后查看返回值,a=1,b=0,rlt=false,d=1,将m的值修改为1.532d后再运行一次,查看结果为a=2,b=0,rlt=false,d=1;下面测试long类型,将代码修改为:

long m = 9223372036854775807;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;

运行后发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m.ToString());)报错:“Value was either too large or too small for an Int32.”,值对于Int32太大或太小,其他返回结果b=0,rlt=false,d=-1;

下面继续看第三种情况:字符串,同样修改代码如下:

string m = "1.32";
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m, out b);
int c = int.Parse(m);
int d = (int)m;

发现最后一句(int d = (int)m;)报错:“Cannot convert type 'string' to 'int'”,不能转换string到int类型,同样注释掉这句再运行,发现(int a = Convert.ToInt32(m);)和(int c = int.Parse(m);)均报如下的错误:“Input string was not in a correct format.”,输入的字符串格式不正确,只有将m的值修改为整型的字符串(如:”12”)才不会报如此错误。

好了,测试做完了,下面进行总结:

1)对于转换对象,Convert.ToInt32()可以为多种类型(例出数字类型外bool,DateTime等),int.TryParse()和int.Parse()只能是整型字符串类型(即各种整型ToString()之后的形式,不能为浮点型,否则int.Parse()就会出现输入的字符串格式不正确的错误,int.TryParse()也会返回false,输出参数为0),(int)只能是数字类型(例float,int,uint等);

2)对于空值NULL,从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受NULL;Convert.ToInt32()其实是在转换前先做了一个判断,参数如果为NULL,则直接返回0,否则就调用int.Parse()进行转换,int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0;

3)针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d还是返回1;

4)关于溢出,将大的数据类型转换为小的数据类型时Convert.ToInt32()和int.Parse()都会报溢出错误,值对于Int32太大或太小,而(int)不报错,但是返回值为-1。

如此可见,我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,如果是整型字符串类型的,考虑用int.Parse()进行转换,如果不是这两种类型,再考虑用Convert.ToInt32()进行转换。

作者:Statmoon

    

出处:http://leolis.cnblogs.com/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://blog.51cto.com/jiaojusuimu/1875362

TryParse方法集相关推荐

  1. go reflect 取指针_Go的方法集详解

    女主宣言 Go语言以其本身具有的高并发特性,在云计算开发中,得到了广泛的应用,也深受广大开发者的欢迎.但是大家对go语言真的了解了么?本文作者经过对go语言的多年实践应用,现对go语言中的方法集进行了 ...

  2. PHP常用工具方法集...

    PHP常用工具方法集,更新时间  2018-7-14 <?php /*** 常用工具方法集* Author: zj*//** 工具总述 1.加密解密 2.生成随机字符串 3.获取文件扩展名(后缀 ...

  3. 【终结版】C#常用函数和方法集汇总

    C#里面的常用的函数和方法非常重要,然而做题的时候会经常忘记这些封装好的方法,所以我总结一下 C#常用函数和方法集. [1]C#操作字符串的常用使用方法 在 C# 中,您可以使用字符数组来表示字符串, ...

  4. 【转载】 C#中使用int.TryParse方法将字符串转换为整型Int类型

    在C#编程过程中,将字符串string转换为整型int过程中,时常使用的转换方法为int.Parse方法,但int.Parse在无法转换的时候,会抛出程序异常,其实还有个int.TryParse方法可 ...

  5. mysql去掉乱码_mysql消除乱码方法集

    mysql消除乱码方法集 我用php+mysql做系统的时候发现数据库的汉字在数据库里是显示正常的,但是一旦数据库与php连接,汉字就会显示为???多个问号,一直都在想办法解决它,但是试了好包括修改p ...

  6. int.TryParse 方法

    int.TryParse 方法 程序开发中,免不了不同数据类型之间的转换.C#中针对转换有了一个TryParse的方法. 如果转换成功则返回true.否则返回false int.TryParse(st ...

  7. Marvell 88nv1120开卡方法集大成之作,附开卡工具

    Marvell 88nv1120开卡方法集大成之作,附开卡工具,直接上干货! 1.只针对开海力士16nm tlc的教程,别的我没有开过 2.除了jm20329的桥之外,vl711也亲测可用 3.如果是 ...

  8. u盘中的android文件夹图标不显示了,u盘中文件不能显示解决方法集

    u盘中文件不能显示解决方法集 文件不能显示了,但是看属性的时候发现空间仍然被占用,让U盘里面的文件夹重新显示出来可用以下三个方法: 1.可以用WINRAR找回文件 随意随意打开一个压缩文件,打开对话框 ...

  9. DateTime TryParse方法,介绍

    1.与Date.Parse()方法的区别: Date.Parse(object o)方法接受一个object类型的参数,当参数为空或转换失败时会抛出异常 DateTime.TryParse方法不会抛出 ...

最新文章

  1. Wordpress优化:网站用nginx前端缓存+Redis Cache缓存提速网站
  2. ceph rbdmap遇到的一个问题
  3. python现在最新的版本-Python 3.8 已发布,现在是切换至新版本的好时机吗?
  4. JavaScript——获取浏览器滚动条(ScrollBar)宽度
  5. SQL Server索引进阶第十篇:索引的内部结构
  6. 带字母的计算机在线使用,ASCII,进位制在线转换工具
  7. RDBMS vs. NoSQL Clojure概述
  8. qlabel 显示图片后大小不变_图形编程:QT使用scrollarea显示图片的解决方案
  9. ubuntu下的vim与ctags
  10. java.util.ArrayList#add探索
  11. 25本免费的Python电子书
  12. 怎么使用USB Redirector远程共享软件加密狗
  13. Mac电脑没声音了怎么办?苹果电脑没声音的解决方法
  14. 网上商城-java基础练习项目-仿照雷蛇商城
  15. 黑马程序员Android28期视频下载
  16. TCP接收窗口--确定Window
  17. js 去掉字符串的空格回车换行
  18. 交互入门2——射击打靶游戏
  19. html5支持h265吗,PC端播放H265
  20. 3个普通人的致富案例,讲述一个当下年赚50万的创业机遇

热门文章

  1. opensuse zypper
  2. docker 安装matlab记录
  3. C#,初学琼林(01)——绝对值(Absolute Value)计算的源代码进化过程及编程的基本范式
  4. 【Web】jsnbd
  5. antd表格列自定义显示与隐藏
  6. 几种还款的方式中本金和利息的计算
  7. 极验验证码(6.0.9)破解(二) 之 反混淆
  8. 【趣题 一】--- 酒精与水问题
  9. 【Python】将文章变为软文的诗词风
  10. 函数简介篇——错误处理函数:errno值、perror()、streeor()、streeor_r()