首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Convert.TryToInt64而不是Convert.ToInt64?

Convert.TryToInt64而不是Convert.ToInt64?
EN

Stack Overflow用户
提问于 2012-02-19 10:00:21
回答 3查看 7.7K关注 0票数 5

我有一个必须实现的this函数:

代码语言:javascript
复制
protected override ValidationResult IsValid(
    Object value,
    ValidationContext validationContext
)
{
  //Here is where I wanna test whether the following conversion is applicable
  var x = Convert.ToInt64(value);
}

我可以将这一行包装在try-catch块中,或者使用其他方法来执行测试,下面是其中之一:

代码语言:javascript
复制
var convertible = value as IConvertible;
if (convertible != null)
  var x = convertible.ToInt64(null);

做这件事最有效的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-19 10:12:25

您可以在这里定义一个默认值,如果解析(转换)适用,它将返回转换后的int64,否则将返回默认值:

代码语言:javascript
复制
Int64 DefaultValue = 0;
Int64.TryParse(MyVar , out DefaultValue);

即:

代码语言:javascript
复制
Int64 DefaultValue = 0;
Int64.TryParse("1234" , out DefaultValue);

DefaultValue将为1234

代码语言:javascript
复制
Int64 DefaultValue = 0;
 Int64.TryParse("test" , out DefaultValue);

DefaultValue将为0

您还可以通过像这样声明变量来使其更具破坏性:

代码语言:javascript
复制
 Int64.TryParse("123" , out Int64 DefaultValue);
票数 7
EN

Stack Overflow用户

发布于 2012-02-19 10:36:42

使用IConvertible对我来说最有效。

我做了一个简短的测试,用这种方式(6倍)更快,使用IConvertible,代码看起来也更干净,更少冗长,符合我的口味。

代码语言:javascript
复制
static void Main(string[] args)
{
  var sw = new Stopwatch();

  sw.Start();
  for (short i = 0; i < short.MaxValue; i++)
  {
    var foo = IsValid1(i);
  }
  sw.Stop();
  var result1 = sw.Elapsed;
  Console.WriteLine(result1);

  sw.Start();
  for (short i = 0; i < short.MaxValue; i++)
  {
    var foo = IsValid2(i);
  }
  sw.Stop();
  var result2 = sw.Elapsed;

  Console.WriteLine(result2);
  Console.ReadKey();
}

static bool IsValid1(object value)
{
  var convertible = value as IConvertible;
  if (convertible != null)
    return convertible.ToInt64(null) != 0;
  return true;
}
static bool IsValid2(object value)
{
  if (value != null)
  {
    long amount;
    if (long.TryParse(value.ToString(), out amount))
      return amount != 0;
  }
  return true;
}

输出:

代码语言:javascript
复制
00:00:00.0031987
00:00:00.0186700
票数 1
EN

Stack Overflow用户

发布于 2012-02-19 10:13:37

Int64.TryParse()呢?当然,您需要.ToString()您的value参数,否则我会认为这是工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9345999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档