繁体   English   中英

如何解决错误不包含定义 - C# 新手

[英]How to solve error does not contain a definition for - new to C#

我在 nodejs/typescript 编程后开始学习 c#。

我遇到了以下错误:

TypeTests.cs(22,50):错误 CS1061:“书”不包含“名称”的定义,并且找不到接受“书”类型的第一个参数的可访问扩展方法“名称”(您是否缺少使用指令或程序集引用?)

这是我的班级

using System;
using System.Collections.Generic;

namespace GradeBook
{
    public class Book
    {
        // this is how we generate a constructor in c#
        public Book(string name)
        {
            grades = new List<double>();
            Name = name;
        }

        public void AddGrade(double grade)
        {
            grades.Add(grade);
            Console.WriteLine($"A new added grade: {grade:N2}");
        }

        public Stats GetStats()
        {
            var result = new Stats();
            result.Average = 0.0;
            result.High = double.MinValue;
            result.Low = double.MaxValue;

            foreach (var grade in grades)
            {
                // log hightest grades
                result.High = Math.Max(grade, result.High);
                // log lowest grades
                result.Low = Math.Min(grade, result.Low);
                result.Average += grade;
            }

            result.Average /= grades.Count;

            return result;
        }

        // its no longer a variable it is now called field in c#
        private List<double> grades;
        public string Name;
    }
}

我的测试班:

using System;
using Xunit;

namespace GradeBook.tests
{
    /*
    // Guideline to writing good unit tests:
    // arrange the test
    // act - the actual actions
    // assert - the values that are computed in the act section
   */
    public class TypeTests
    {
        [Fact]
        public void CSharpIsPassByValue()
        {
            // arrange
            var book1 = GetBook("My Book");
            GetBookSetName(book1, "New Book Name!");
            //assert
            Assert.Equal("My Book", book1.name);
        }

        private void GetBookSetName(Book book, string name)
        {
            book = new Book(name);
        }

        [Fact]
        public void CanSetNameFromReference()
        {
            // arrange
            var book1 = GetBook("My Book");
            SetName(book1, "New Book Name!");
            //assert
            Assert.Equal("New Book Name!", book1.name);
        }

        private void SetName(Book book, string name)
        {
            book.Name = name;
        }

        [Fact]
        public void GetBookReturnsDifferentObjects()
        {
            // arrange
            var book1 = GetBook("My Book");
            var book2 = GetBook("My Other Book");

            //assert
            Assert.Equal("My Book", book1.name);
            Assert.Equal("My Other Book", book2.name);
            Assert.NotSame(book1, book2);
        }

        [Fact]
        public void TwoVarsCanReferenceSameObject()
        {
            var book1 = GetBook("Book 1");
            var book2 = book1;

            Assert.Same(book1, book2);
            Assert.True(Object.ReferenceEquals(book1, book2));
        }

        Book GetBook(string name)
        {
            return new Book(name);
        }
    }
}

字段名称在 C# 中区分大小写,因此在这一行中:

Assert.Equal("My Book", book1.name);

name应该是Name

Assert.Equal("My Book", book1.Name);

您的代码中实际上有几个地方需要更正。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM