2016-07-26 55 views
0

我想添加一个扩展方法为int,称为TryParseNull,它接受一个字符串作为输入,并返回转换的整数,如果成功或null,如果字符串不是一个有效的整数。不能将TryParseNull扩展方法添加到int在C#

我跟着这个职位的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")

+1

'“1”.TryParseNull()' –

+0

您不能将静态方法添加到您不控制的类型。 – Will

回答

3

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

而不是

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

尝试

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

编辑: 顺便说一下,你也可以静态地用 '这个' 参数作为第一个参数调用该方法。

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

尝试

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

你的方法是延长string,不int?。它不会返回int?

0

int是一个框架提供的类型和添加是int执行原本不是一部分,所以你不能直接使用类型调用它,你就需要调用它的int实例的扩展方法正如其他人所指出的。