Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 其他类型的胰蛋白酶_C#_Extension Methods_Nullable_Signature_Tryparse - Fatal编程技术网

C# 其他类型的胰蛋白酶

C# 其他类型的胰蛋白酶,c#,extension-methods,nullable,signature,tryparse,C#,Extension Methods,Nullable,Signature,Tryparse,我想创建一个int.TryParse方法(string,out int number),但如果无法解析,则该数字应为null,而不是0 我见过其他一些解决方案,但它们似乎都不允许定义条目类型 基本上我想问的是: 如何将int.TryParse中的“int”更改为其他内容,例如。 int?TryParse 这就是我到目前为止所做的,但是现在我必须做一个int的对象?为了使用它而不是直接在int上使用它?类型 我所拥有的: var _string = Console.ReadLine

我想创建一个int.TryParse方法(string,out int number),但如果无法解析,则该数字应为null,而不是0

我见过其他一些解决方案,但它们似乎都不允许定义条目类型

基本上我想问的是:

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

这就是我到目前为止所做的,但是现在我必须做一个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);
我查过的东西:


伪答案:

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的实例“result”。

int
中,不能重载
null
结构,其中
t
。因此,您必须使用另一种方法才能调用该方法

您似乎试图在
int?
上创建一个扩展方法,实际上它应该在
string
上,然后您必须使用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
。正如我在回答的前两个词中所说:“你不能”。@Dennisvan虽然在C#中没有创建静态扩展方法的方法,但到今天为止,还没有办法在
int?
上创建自己的静态方法,“他们”也做不到。这种语言就是不支持它@DennisVanhout@DennisVanhout“他们”可以通过将该功能添加到编译器中(这不是免费的),但技术上“你”也可以,因为roslyn是可扩展的:)@Rawling他们都使用string实例。我明确要求不要做的事情…请编辑你的问题正文,说明你为什么不同意重复的问题,而不是问题标题。你可以使用int.TryParse。你已经注意到了。但我想知道,假设可以使用int?.TryParse,什么字符串输入会导致null?你想处理null、1、2、3、4、5等计算吗?@ClarkKent,发帖:
如果数字不能解析,那么它应该是null。(对我来说)这听起来像是如果
字符串输入是
cake
,而不是将结果设置为
0
,它应该设置为
null
。那么int?.TryParse(“”)将导致true和null?或int?.TryParse(“null”)结果为true和null?或int?.TryParse(“蛋糕”)将导致true和null?还是全部??什么会导致false和null?
yourStringInstance.TryParse(out int? result);