无法在C#中将TryParseNull扩展方法添加到int

时间:2016-07-26 16:40:49

标签: c#

我正在尝试向int调用TryParseNull添加扩展方法,该方法将字符串作为输入,如果成功则返回转换后的整数,如果字符串不是有效整数则返回null。

我按照这篇文章中的doubleMe示例:using extension methods on int

我的扩展方法声明如下:

public static class IntExtensions {
    public static int? TryParseNull(this string s) {
        int dummy;
        int? value;
        if (int.TryParse(s, out dummy)) {
            value = dummy;
        }
        else {
            value = null;
        }
        return value;
    }
}

但是当我尝试像这样使用它时,编译器抱怨它不知道TryParseNull是什么。我尝试了以下两种方法。

int? myNum = int?.TryParseNull("1");
int? myNum = int.TryParseNull("1");

编辑:我认为问题是参数this string s,但是我传入一个字符串,所以我不确定如何纠正它。

编辑2:从下面的答案中我可以看到问题所在,但有没有办法让语法int.TryParseNull("1")

4 个答案:

答案 0 :(得分:3)

扩展方法适用于'this'参数的实例,而不适用于类型。

而不是

int? myNum = int?.TryParseNull("1");

尝试

int? myNum = "1".TryParseNull();

修改 顺便提一下,您也可以使用'this'参数作为第一个参数静态调用该方法。

int? myNum = IntExtensions.TryParseNull("1");

答案 1 :(得分:3)

尝试

int? myNum = "1".TryParseNull();

您的方法正在延长string,而不是int?。它确实返回int?

答案 2 :(得分:0)

int是一个框架提供的类型,你添加的扩展方法最初不是int实现的一部分,所以你不能直接使用Type调用它,你需要在它上面调用它其他人指出的int的实例。

答案 3 :(得分:0)

根据您的编辑,您尝试向现有类添加静态方法。见下文: Can I "add" static methods to existing class in the .NET API?

简短的回答是,您不能,扩展方法仅适用于实例。