其他类型的TryParse

时间:2019-01-04 13:50:58

标签: c# extension-methods nullable signature tryparse

我想创建一个方法int.TryParse(string,out int number),但是如果不能解析,则该数字应为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。

1 个答案:

答案 0 :(得分:3)

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

您似乎正在尝试在int上创建扩展方法,实际上该扩展方法应该在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; 
}