C# 让CompareTo()转换为它所使用的类型';与之相比
我有下面的一段代码,这里我有两个if语句,它们检查C# 让CompareTo()转换为它所使用的类型';与之相比,c#,.net,.net-core,C#,.net,.net Core,我有下面的一段代码,这里我有两个if语句,它们检查value实际上的类型object是否是十进制或int。但是我觉得我在这里写的是双代码,我如何才能使比较()方法自动将接收到的类型转换为与之比较的类型?我的解决方案是始终将其转换为十进制,以查看值是否大于0 if (value is decimal) { if ((value as IComparable)?.CompareTo(0m) > 0) return Task.FromResult(Precondition
value
实际上的类型object
是否是十进制或int。但是我觉得我在这里写的是双代码,我如何才能使比较()
方法自动将接收到的类型转换为与之比较的类型?我的解决方案是始终将其转换为十进制,以查看值是否大于0
if (value is decimal)
{
if ((value as IComparable)?.CompareTo(0m) > 0)
return Task.FromResult(PreconditionResult.FromSuccess());
}
if (value is int)
{
if ((value as IComparable)?.CompareTo(0) > 0)
return Task.FromResult(PreconditionResult.FromSuccess());
}
您可以尝试使用Comparer.Default对于if((值为IComparable)?.CompareTo(0m)>0)
问题就在这里。假设值是一个int
,我将它与0m
进行比较,反之亦然,它会出错。@PavelAnikhouski,你能举个例子吗。如果value
是零值,这不起作用,因为Convert.ToDecimal
不会返回失败信息,@Dai你有什么建议吗?使用if(value是Decimal dec value){…}
。
if (Convert.ToDecimal(value) > 0m)
return Task.FromResult(PreconditionResult.FromSuccess());