1

我正在查看 BigInteger 的文档,并在方法中遇到了以下内容BigInteger.Equals(Object obj)

如果 obj 参数不是 BigInteger 值,而是定义了隐式转换的数据类型,则 Equals(Object) 方法在执行比较之前将 obj 转换为 BigInteger 值。

然后我开始想知道我将如何去做,因为从对象转换需要显式转换。我想出的最好方法如下:

Type type = obj.GetType()
if(type == typeof(byte))
{
  byte b = (byte)obj;
  return Equals(b);
}
if(type == typeof(short))
{
  short s = (short)obj;
  return Equals(s);
}
//Continue for all types that can be implicitly cast to BigInteger.

在我看来,我缺少一种更简单的方法来做到这一点。那么,考虑到我从一个对象开始,还有哪些其他方法可以进行隐式转换?

4

1 回答 1

3

ILSpy 的当前实现:

return obj is BigInteger && this.Equals((BigInteger)obj);

至少该文件的措辞可能会被认为具有误导性。它的意思是什么BigInteger从它派生的任何东西都将隐含转换为BigInteger,因此将被转换为 aBigInteger以测试相等性。

will的当前定义struct意味着没有任何东西可以派生自BigInteger,因此文档在该声明中实际上有点毫无意义。

您可能对用户定义的implicit运算符感到困惑,该运算符将用于允许int, short, et alBigInteger在代码中“隐式”存储:

BigInteger b = 1;
于 2012-09-12T15:41:05.737 回答