【问题标题】:TryParse for other types [duplicate]TryParse 用于其他类型 [重复]
【发布时间】:2019-05-31 02:28:13
【问题描述】:

我想做一个方法 int.TryParse(string, out int number),但是如果不能 Parse 的数字应该是 null 而不是 0。

我见过其他一些解决方案,但似乎没有一个实际上允许定义条目类型。

基本上我要问的是:

如何将 int.TryParse 中的“int”更改为其他内容,例如 int?.TryParse

    public static bool TryParse(this int? i, string input, out int? output)
    {
        var IsNumber = int.TryParse(input, out int result);

        if (!IsNumber)
            output = null;
        else
            output = result;
        return IsNumber; 
    }

这是我目前所拥有的,但现在我必须创建一个 int 对象?为了使用它而不是仅仅能够直接在 int 上使用它?输入。

我有什么:

        var _string = Console.ReadLine();
        int? nInt = null;
        var IsNumber = nInt.TryParse(_string, out int? result);

我想要什么:

        var _string = Console.ReadLine();
        var IsNumber = int?.TryParse(_string, out int? result);

我检查的东西:

Convert string to nullable type (int, double, etc...)

TryParse Nullable types generically


伪答案:

public class Int
{
    public static bool TryParse(string input, out int? output)
    {
        var IsNumber = int.TryParse(input, out int result);

        if (!IsNumber)
            output = null;
        else
            output = result;
        return IsNumber;
    }
}

然后可以用作

var IsNumber = Int.TryParse(_input, out int? result);

返回一个布尔值和一个值为 int 或 null 的实例“结果”。

【问题讨论】:

  • @Rawling 他们都使用字符串的实例。我明确要求不要做的事情......
  • 请编辑您的问题正文,说明您不同意副本的原因,而不是问题标题。
  • 您可以使用 int.TryParse。你已经注意到了。但是我想知道,假设可以使用 int?.TryParse,什么字符串输入会导致 null?您希望能够处理 null、1、2、3、4、5 等计算吗?
  • @ClarkKent,来自帖子:the number should be a null if it can't Parse。这听起来(对我来说)就像 string inputcake ,而不是将结果设置为 0,它应该设置为 null
  • so int?.TryParse("") 结果为真和空?或 int?.TryParse("null") 结果为真和空?或 int?.TryParse("cake") 将导致 true 和 null?还是全部??什么会导致 false 和 null?

标签: c# extension-methods nullable signature tryparse


【解决方案1】:

您不能在 int 中重载 Nullable<T> 结构 T 。因此,您必须解决另一种方法才能调用该方法。

你似乎试图在int?上做一个扩展方法,实际上它应该在string上,然后你必须使用一个字符串实例来调用它:

public static bool TryParse(this string input, out int? output)
{
    var IsNumber = int.TryParse(input, out int result);

    if (!IsNumber)
        output = null;
    else
        output = result;
    return IsNumber; 
}

叫它:

yourStringInstance.TryParse(out int? result);

【讨论】:

  • 其实是Nullable<int>,不是int
  • 正如我在回答的前两个字中所说:“你不能”。
  • @DennisVanhout 有一个 proposal 可以在 C# 中创建静态扩展方法,但截至目前还没有办法在 int? 上创建自己的静态方法。
  • “他们”也做不到。该语言不支持它@DennisVanhout
  • @DennisVanhout "他们" 可以通过向编译器添加该功能来做到这一点(这不是免费的),但从技术上讲,“你”也可以,因为 roslyn 是可扩展的 :)
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 2022-10-14
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2021-09-21
相关资源
最近更新 更多