gpt4 book ai didi

c# - "object < object"的 c# 等价物是什么?

转载 作者:行者123 更新时间:2023-11-30 13:38:24 25 4
gpt4 key购买 nike

我有一些非常古老的 VB.Net 代码:

 Private Function Min(ByVal A As Object, ByVal B As Object) As Object
If A Is DBNull.Value Or B Is DBNull.Value Then Return DBNull.Value
If A < B Then Return A Else Return B
End Function

不用担心。编译器吃了它……并要求更多。但是在转换为 C# 时:

    private object Min(object A, object B)
{
if (object.ReferenceEquals(A, DBNull.Value) | object.ReferenceEquals(B, DBNull.Value))
return DBNull.Value;
return A < B ? A : B;
}

编译器因错误消息而阻塞:

Cannot apply operator '<' with operands of object and object

那么,怎么回事呢?

最佳答案

该代码仅适用于 VB,因为您使用的是 Option Strict Off。一般来说,这是非常糟糕的做法。好吧,正如您所说,这是旧代码。在现代代码(无论是 VB 还是 C#)中,您会使用泛型或/和接口(interface)。由于 DBNull,代码无法直接转换为泛型,但这是 VB 中的泛型方法(没有 DBNull 检查):

Function Min(Of T As IComparable(Of T))(a As T, b as T) As T
Return If(a.CompareTo(b) < 0, a, b)
End Function

回到您的代码,您可以在确保它们不是 DBNull 之后简单地将这两个参数转换为 IComparable,然后执行等效操作:

private object Min(object A, object B)
{
if (A == DBNull.Value || B == DBNull.Value)
return DBNull.Value;
return ((IComparable) A).CompareTo(B) < 0 ? A : B;
}

(为了完整起见,C# 4 has the dynamic keyword 允许在道德上等同于旧的 VB 代码,即将方法分派(dispatch)推迟到运行时。但是,我认为这不是这里最直接的解决方案,我通常更喜欢尽可能多的静态检查类型信息。)

关于c# - "object < object"的 c# 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com