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