Why “Equals” method resolution with generics differs from explicit calls

后端 未结 2 1662
猫巷女王i
猫巷女王i 2020-12-20 21:22

I have the following example:

namespace ComparisonExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var hello1          


        
2条回答
  •  遥遥无期
    2020-12-20 22:04

    Addition from MSDN:

    Unbounded Type Parameters.
    Type parameters that have no constraints, such as T in public class SampleClass { }, are called unbounded type parameters.
    Unbounded type parameters have the following rules:

    • The != and == operators cannot be used because there is no guarantee that the concrete type argument will support these operators.
    • They can be converted to and from System.Object or explicitly converted to any interface type.
    • You can compare to null. If an unbounded parameter is compared to null, the comparison will always return false if the type argument is a value type.

    In this case TValue is converted to System.Object and Equals method called.

提交回复
热议问题