C#Setter和if语句

C#Setter和if语句,c#,if-statement,properties,setter,C#,If Statement,Properties,Setter,我一直在看一个关于C#中OOP的教程 我不明白为什么name属性中的name赋值不在else子句中 class Animal { private string name; protected string sound; public Animal() :this("No Name", "No Sound") { } public Animal(string name) :this(name, "No Sound") { }

我一直在看一个关于C#中OOP的教程

我不明白为什么name属性中的name赋值不在else子句中

class Animal
{
    private string name;
    protected string sound;

    public Animal()
        :this("No Name", "No Sound") { }

    public Animal(string name)
        :this(name, "No Sound") { }

    public Animal(string name, string sound)
    {
        Name = name;
        Sound = sound;
    }

    public string Name
    {
        get { return name; }

        set
        {
            if (!value.Any(char.IsDigit))
            {
                name = "No Name";
            }
            name = value;


        }
    }

    public string Sound
    {
        get { return sound; }

        set
        {
            if (value.Length > 10)
            {
                sound = "No Sound";
            }
            else
            {
                sound = value;
            }
        }
    }

    protected AnimalIDInfo animalIDInfo = new AnimalIDInfo();

    public void SetAnimalIDInfo(int idNum, string owner)
    {
        animalIDInfo.IDNum = idNum;
        animalIDInfo.Owner = owner;
    }

    public void GetAnimalIDInfo()
    {
        Console.WriteLine($"{Name} has the ID of {animalIDInfo.IDNum} and is owned by {animalIDInfo.Owner}");
    }

    public void MakeSound()
    {
        Console.WriteLine($"{Name} says {Sound}");
    }


}
}

有人能给我解释一下吗?不管if语句是什么,这段代码都会给名称赋值吗

另一方面,当我尝试使用else子句时,即使我传递的值不包含任何数字,也会得到“No Name”

以下是主要方法:

static void Main(string[] args)
    {
        Animal whiskers = new Animal()
        {
            Name = "Whiskers",
            Sound = "Meow"
        };

        Dog grover = new Dog()
        {
            Name = "Grover",
            Sound = "Woof",
            Sound2 = "Grrrr"
        };

        grover.Sound = "Woooooooof";

        whiskers.MakeSound();
        grover.MakeSound();

        // Inheritance has an "is a" relationship ("A dog IS AN animal")

        // aggregation or a delegate represents "has a" relationship

        whiskers.SetAnimalIDInfo(12345, "Sally Smith");
        grover.SetAnimalIDInfo(12346, "Paul Brown");

        whiskers.GetAnimalIDInfo();
        grover.GetAnimalIDInfo();




    }

提前谢谢

我也不明白。正如现在所写的,if的结果将始终被
name=value。老实说,JiT的死代码检测可能会注意到这一点,并完全删除if。除非他打算教你这个,否则我看不出这个代码有什么意义

另外,
value.Any(char.IsDigit)
的返回值是反向的,这可能是您最不应该在那里做的事情。真的,除非他试图教你们调试或者是实时编码,否则我看这是行不通的

我能理解的最合理的代码是:

if (value.Any(char.IsDigit))
{
  name = "No Name";
}
else{
  name = value;
}

大多数教程都是业余爱好者、科技作家等写的垃圾。是的,该作业应该在
else
分支中<代码>如果(!value.Any(char.IsDigit))
表示“如果没有任何字符是数字”,即如果没有字符是数字。我认为布尔否定
不属于那里。事实上,它拒绝了任何没有数字的名字。在道具设定器中将某个东西设置为无意义的值作为验证的一部分(“没有名字”)缺乏概念完整性。总之,书籍>视频通常是@đěxěŕ,但这是荒谬的。它应该抛出,或者给某人一个有意义的错误消息,或者仅仅接受查德·巴灵顿·韦尔斯利第三的名字中有一个数字的事实。“这里有一个(坏的)错误的方法来做一些荒谬的事情”是典型的教程。我也同意:)无论哪种方法都是错误的。如果可以,我的名字将是
01100101101101011000111001
;我可以打个电话..你把它修好了我明白了:),
非常感谢!这本教程的作者似乎把一些事情搞砸了!:P@Nat13alia是盖伊吗?@đěxěŕ不知道,但这是本教程的视频:显然,一位评论者也注意到了这本书中的问题: