Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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# 这就是我的理由吗<;T>;是谁介绍的?_C# - Fatal编程技术网

C# 这就是我的理由吗<;T>;是谁介绍的?

C# 这就是我的理由吗<;T>;是谁介绍的?,c#,C#,之所以引入IEquatable接口,是因为它允许您执行与System.Object.Equals方法相同的操作,但不必执行强制转换 我想,谢谢你使它的打字安全Equals()将对象作为参数,因此,如果传入错误类型的对象,则在运行该对象之前不会看到错误 一个原因是,您可以要求类与所需类型相等,而不一定是该类型。例如 public void MyClass<T> where T : IEquatable<Foo> { private static readonly F

之所以引入
IEquatable
接口,是因为它允许您执行与
System.Object.Equals
方法相同的操作,但不必执行强制转换


我想,谢谢你使它的打字安全
Equals()
将对象作为参数,因此,如果传入错误类型的对象,则在运行该对象之前不会看到错误

一个原因是,您可以要求类与所需类型相等,而不一定是该类型。例如

public void MyClass<T> where T : IEquatable<Foo>
{
    private static readonly Foo SpecialFoo = Foo.SpecialFoo;

    public void MyMethodThatProcessesTs(T theT)
    {
        if (theT.Equals(SpecialFoo))
        {
            // process theT.
        }
    }
}
public void MyClass,其中T:i可满足
{
私有静态只读Foo SpecialFoo=Foo.SpecialFoo;
处理测试的公共无效MyMethods(T)
{
if(theT.Equals(SpecialFoo))
{
//过程测试。
}
}
}

除了@Bala R所说的,它还避免了在结构之间进行自定义相等性检查时装箱