Console.WriteLine无法正常工作?

时间:2012-01-01 22:18:03

标签: c# class methods

我创建了一个程序,它应该计算不规则形状物体的表面积,例如湖泊。 我读了一个文件,其中包含x和y值的值以及深度。

我是C#的新手,所以我还没有完全理解所有内容,但我认为我的代码应该可行,但是,它似乎并没有将该区域的值写入屏幕。

我知道Console.WriteLine(_surface);应该有效,但我似乎无法做任何事情,而且可能是在错误的地方!

有人可以告诉我哪里出错了吗?

我的代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NUnit.Framework;


namespace ConsoleApplication1
{


    public class ValueXyz
    {
        public double X { get; set; }
        public double Y { get; set; }
        public int Z { get; set; }


    }


    public class SurfaceCalculator
    {

        private ValueXyz[] _valuesXyz;
        private double _surface;
        private readonly string _textWithValues;
       public SurfaceCalculator(string textWithValues)

        {
            _textWithValues = textWithValues;
            SetValuesToCalculate();
        }

        public double Surface
        {
            get { return _surface; }

        }


        public void CalculateSurface()
        {

            for (var i = 0; i < _valuesXyz.Length; i++)
            {
                if (_valuesXyz[i].Z == 0)
                    _surface = (_valuesXyz[i].X * _valuesXyz[i + 1].Y) - (_valuesXyz[i + 1].X * _valuesXyz[i].Y);

                Console.WriteLine(_surface);
            }


        }


        private void SetValuesToCalculate()
        {
            var valuesXyz = _textWithValues.Split(' ');


            _valuesXyz = valuesXyz.Select(item => new ValueXyz
            {
                X = Convert.ToDouble(item.Split(',')[0]),
                Y = Convert.ToDouble(item.Split(',')[1]),
                Z = Convert.ToInt32(item.Split(',')[2])


            }).ToArray();




        }



        public void TestSurfaceCalculatorGetsAValue()
        {

            var textWithValues = File.ReadAllLines(@"C:\Users\user\Documents\Visual Studio 2010\Projects\Lake_Take_Toooooo\Lake_Take_Toooooo\bin\Debug\Lake_Test.csv");
            var calculator = new SurfaceCalculator(_textWithValues);
            calculator.CalculateSurface();


            Assert.IsNotNull(calculator.Surface);

        }

        static void Main()
        {

            Console.ReadKey();
        }
    }
}

这是我第一次使用课程,如果有明显的答案,请道歉。

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

您需要在Main方法中实际调用该方法,该方法是程序入口点。像:

    static void Main()
    {
        CalculateSurface();
        Console.ReadKey();
    }

运行程序时,实际只执行Main方法中的代码。如果你没有从那里调用任何东西,那么就不会执行任何代码。

答案 1 :(得分:1)

在主赛事中没有调用任何功能...... 我应该想象读键会等待键输入然后关闭,正确吗?

答案 2 :(得分:0)

您是否尝试将其作为控制台应用程序或单元测试运行? (看起来你正试图将它作为单元测试运行,因为你正在使用NUnit.Framework并且有一个带有断言的Test方法......)

如果要将其作为控制台应用程序运行,则必须调用应在Main方法中执行的代码。

如果要将其作为单元测试运行,则必须向测试类和测试方法添加一些“属性”。该类应具有[TestFixture]属性,该方法应具有[Test]属性,如:

[TestFixture]
public class SurfaceCalculator {

...

[Test]
public void TestSurfaceCalculatorGetsAValue() {
...
}

}