【问题标题】:convert this conversion function from vb to c#将此转换函数从 vb 转换为 c#
【发布时间】:2015-12-10 04:44:02
【问题描述】:

我有一个简单的 vb 方法将字符串转换为整数,它的定义如下:

Public Function getInt(input As String) As Integer
    Int32.TryParse(input, getInt)
End Function

如何在不使用额外整数变量的情况下使其在c# 中工作?我可以在 c# 中做同样的事情,如下所示:

 public int getInt(string input) 
    {
        int outParam = 0;
        Int32.TryParse(input, out outParam);
        return outParam;
    }

是否可以避免使用额外变量:int outParam = 0;

我尝试过Int32.TryParse(input, return);Int32.TryParse(input,out return);,但没有用;

更新:当前的 c# 方法运行良好。我不要求任何替代方案。只是想知道是否可以像我在 vb 中所做的那样自定义此方法(避免额外声明 int 变量)

【问题讨论】:

  • C# 中没有类似的方法使用TryParse,因为它可以让您轻松检查解析是否成功。
  • 这只有 3 行代码。我没有看到这个问题。不是所有的东西都需要一个班轮。
  • 查看调用Number.TryParseInt32Int32.TryParse 实现的参考源。再声明一个变量非常便宜。您是否对 C# 方法进行了内存(和/或性能)分析并发现附加声明是一个瓶颈,或者您只是在寻找微优化?给你一个不回答:不,你不能避免int outparam,但你可以避免`= 0`。
  • 即:int outparam; Int32TryParse(input out outparam); return outparam; 顺便说一句。你依赖于实现细节,如果TryParse 失败,outparam 将是0。这种行为有点像guaranteed,但恕我直言,这违背了试图将string解析为int的“精神”(如果无法解析,我可能不希望0作为“默认值”) . -- 更确切地说是有一个带有Nullable<int> 的(内置)版本。
  • 不是反对者,但“常识”声明一个变量非常便宜,这使得这是一个微/过早的优化,通常不受欢迎。此外,还有许多不好的“转换代码”问题。我不认为这是,但也许有人认为这是“联想不好”。此外,它读起来有点像“我知道如何正确地做到这一点,但我不想要正确地做到这一点,但仍能得到正确的结果。”

标签: c# vb.net int type-conversion tryparse


【解决方案1】:

您的 VB 代码正在使用 VB 的“功能”,它允许您使用函数名称“getInt”作为隐式局部变量。这个隐式局部变量的最后一个值由函数退出时返回。

您的 C# 代码是必要且正确的等效代码 - 它声明要使用显式本地“outParam”代替函数名称,并使用显式“返回”代替 VB 的隐式返回。

VB 函数中隐藏的局部变量的赋值和返回可能应该被视为遗留特性,最好避免,因为它会降低清晰度。

【讨论】:

  • 这可能是“真正”问题的最佳答案:为什么我可以在 VB.Net 中的一行中执行此操作,但在 C# 中却必须在三行中执行此操作。
【解决方案2】:

您上面的代码实际上相当不错。我不知道你为什么要在没有int 的情况下这样做,但你可以这样做:

public int getInt(string input)
{
    return Int32.Parse(input);
}

问题是如果字符串不能很好地解析为整数,它将引发异常。你上面提供的代码容错性更强。

【讨论】:

  • Int32.Parse 会在转换失败的情况下抛出异常
  • 正确...正如我在评论中提到的。您可以使用try {} catch {} 包装该方法,但话又说回来,最好使用TryParse
  • 不要在你的代码中使用更多的try catch,它会降低你的应用程序性能,在真正有用的时候使用它
【解决方案3】:

你可以使用:

Int32.Parse(input);

或者:

public int getInt(string input) 
{
    int outParam = 0;
    if (!Int32.TryParse(input, out outParam))
        throw new Exception("Show message!");
    return outParam;
}

【讨论】:

  • 你能看看这个问题吗?
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多