( = Vector3.0 )和( .Equals(Vector3.0))有什么区别?[已关闭]

问题描述 投票:-1回答:1
public GameObject tree;

有什么区别。

tree.transform.localPosition = Vector3.zero;

tree.transform.localPosition.Equals(Vector3.zero);

谁能用c#ex解释一下?

c# unity3d
1个回答
3
投票
tree.transform.localPosition = Vector3.zero;

这个 担任新的职务 tree 对象。在这种情况下,将其设置为父级位置或World 0,0,0 如果它没有。


tree.transform.localPosition.Equals(Vector3.zero);

这个 返回 a bool 检查您处理的位置是否完全相同。请看 Vector3.Equals.

它作为独立的代码行是没有意义的,因为你没有将返回值用于任何事情,也不会改变任何事情。这就是为什么有一个警告,但没有游戏中断的异常......这一行完全没有用。

你应该使用返回值或者把它分配给一些东西,以便以后使用它,例如

bool isAtOrigin = tree.transform.position.Equals(Vector3.zero);

然后你 可能 想用它来检查条件,比如说。

if(tree.transform.position.Equals(Vector3.zero))
{
    // then do something
}

然而,由于浮点精度的原因,通常不建议这样做......特别是对于移动的对象,你通常更愿意使用

if(tree.transform.position == Vector3.zero)
{
    // then do something
}

哪儿 == 使用的近似精度为 0.00001


无意冒犯,但这是一个相当基本的问题,你应该退一步,进入一些。c# 在进入Unity开发之前,先学习基础知识;)


0
投票

正如有人回答的那样

Equals证明了身份,这意味着对象是完全一样的。你可以覆盖Equals,在这种情况下,你可以检查它们的属性。(在object.Equals的情况下,你可以证明身份).使用"="你可以给它赋值。

如果 expr 不是 null,并且以下任何一项为真,则 is 表达式为真:(SRC.Equals.Import.Equals)。https:/docs.microsoft.comen-usdotnetcsharplanguag-referencekeywordsis)

expr 是一个与 type 相同类型的实例。

expr是一个从type派生出来的类型的实例。换句话说,expr的结果可以上传到type的实例。

expr的编译时类型是type的基类,而expr的运行时类型是type或者是从type派生出来的。变量的编译时类型是变量在其声明中定义的类型。变量的运行时类型是分配给该变量的实例的类型。

expr是一个实现了类型接口的类型实例,在这里你可以找到如何重写Equals。https:/docs.microsoft.comde-dedotnetapisystem.object.equals?view=netframework-4.8。

这里有一些例子。

    public class Word
{
    public string Name,Planet;

    public Word(string name, string planet)
    {
        Name = name;
        Planet = planet;
    }

    //Euqals is no overriden
    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }


    public class OtherClass
    {
        public OtherClass()
        {
            Word word = new Word("word","erth");
            Word otherWord = new Word("word","moon");
            string a = null;

            var r = a == null; //true
            var r2 = object.Equals(a, null);//true      
            var r3 = word.Name is string; //true
            var r4 = word.Name is Word; //false
            var r5 = word.Equals(otherWord); //false
        }
    }

如果你在你的类中重写了equals:

public class Word
{
    public string Name;

    public Word(string name)
    {
        Name = name;
    }

    //Override Equals
    public override bool Equals(object obj)
    {
        if ((obj == null) || !this.GetType().Equals(obj.GetType()))
        {
            return false;
        }
        else
        {
            Word thisWord = (Word) obj;
            return (Name == thisWord.Name) /* && (Other properties)*/;
        }
    }


    public class OtherClass
    {
        public OtherClass()
        {
            Word word = new Word("word","erth");
            Word otherWord = new Word("word","moon");
            string a = null;

            var r = a == null; //true
            var r2 = object.Equals(a, null);//true      
            var r3 = word.Equals(otherWord); //true
        }
    }

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.