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またはそれから派生するものは暗黙的にキャストされ、同等性をテストする目的でBigIntegera にキャストされます。BigInteger

willの現在の定義は、structから何も派生できないことを意味するBigIntegerため、ドキュメントは実際にはそのステートメントでは少し無意味です。

implicitユーザー定義の演算子と混同している可能性があります。これは、、、などをコードに「暗黙的に」格納できるようintにするために使用されるものです。shortBigInteger

BigInteger b = 1;
于 2012-09-12T15:41:05.737 に答える