Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 让CompareTo()转换为它所使用的类型';与之相比_C#_.net_.net Core - Fatal编程技术网

C# 让CompareTo()转换为它所使用的类型';与之相比

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

我有下面的一段代码,这里我有两个if语句,它们检查
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.Defaultif((值为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());