我正在尝试向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")
?
答案 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?
简短的回答是,您不能,扩展方法仅适用于实例。