如何检查c#中是否设置了类属性?

本文关键字:设置 是否 属性 何检查 检查 | 更新日期: 2023-09-27 18:05:45

我目前正在为我的c#类制作BMI计算器。我的应用要求用户输入身高(以英尺和英寸为单位)和体重(以磅为单位),或者身高(以厘米为单位)和体重(以公斤为单位)。这是一个选项卡控件,它有用于公制模式或公制模式的按钮。

如果单击了imperial选项卡中的"calculate"按钮,我需要确保highightft、hightin和weightLbs文本框已经填写完毕。然后把它们转换成公制单位。如果单击度量选项卡中的计算按钮,我需要确保highightcm和weightKg文本框已填写。

一旦提供了这些,我就将身高和体重转换为BMI。如果我使用if(heightFt == null),我会得到以下错误:

The result of the expression is always 'false' since a value of type 'double' is never equal to 'null' of type 'double?'

如何解决这个问题?

这是我的mainwindow . example .cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BMICalculator
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private BMICalc _BMICalc;
        public MainWindow()
        {
            _BMICalc = new BMICalc();
            InitializeComponent();
        }
        private void calculateImperial_Click(object sender, RoutedEventArgs e)
        {
            _BMICalc.heightFt = Convert.ToDouble(heightFt.Text);
            _BMICalc.heightIn = Convert.ToDouble(heightIn.Text);
            _BMICalc.weightLbs = Convert.ToDouble(weightLbs.Text);
            _BMICalc.doCalculation("Imperial");
            if (_BMICalc.error == null)
            {
                MessageBox.Show("Your BMI is " + _BMICalc.bmi + " and you are " + _BMICalc.category, "Your BMI");
            }
        }
    }
}

这是BMICalc.cs

using System;
using System.Windows;
using System.ComponentModel;
namespace BMICalculator
{
    class BMICalc :INotifyPropertyChanged
    {
        public double _heightFt { get; set; }
        public double _heightIn { get; set; }
        public double _heightCm { get; set; }
        public double _weightLbs { get; set; }
        public double _weightKg { get; set; }
        public double _bmi { get; set; }
        public string _category { get; set; }
        public string _error { get; set; }
        public double heightFt
        {
            get { return heightFt; }
            set
            {
                _heightFt = value;
                OnPropertyChanged("heightFt");
            }
        }
        public double heightIn
        {
            get { return _heightIn; }
            set
            {
                _heightIn = value;
                OnPropertyChanged("heightIn");
            }
        }
        public double heightCm
        {
            get { return _heightCm; }
            set
            {
                _heightCm = value;
                OnPropertyChanged("heightCm");
            }
        }
        public double weightLbs
        {
            get { return _weightLbs; }
            set
            {
                _weightLbs = value;
                OnPropertyChanged("weightLbs");
            }
        }
        public double weightKg
        {
            get { return _weightKg; }
            set
            {
                _weightKg = value;
                OnPropertyChanged("weightKg");
            }
        }
        public double bmi
        {
            get { return _bmi; }
            set
            {
                _bmi = value;
                OnPropertyChanged("bmi");
            }
        }
        public string error
        {
            get { return _error; }
            set
            {
                _error = value;
                OnPropertyChanged("error");
            }
        }
        public string category
        {
            get { return _category; }
            set
            {
                _category = value;
                OnPropertyChanged("category");
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName){
            if(PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        public void doCalculation(string calculationMode){
            if(calculationMode == "Imperial"){
                if (heightFt == null)
                {
                    this.error = "You must provide a value for your height in feet!";
                }
                else if (heightIn == null)
                {
                    this.error = "You must provide a value for your height in inches!";
                }
                else if (weightLbs == null)
                {
                    this.error = "You must provide a value for your weight in pounds!";
                }
                else
                {
                    heightFt = Convert.ToDouble(heightFt);
                    heightIn = Convert.ToDouble(heightIn);
                    weightLbs = Convert.ToDouble(weightLbs);
                    _weightKg = Convert.ToDouble(_weightLbs * (1 / 2.2));
                    _heightCm = Convert.ToDouble((_heightFt + (_heightIn / 12) / 0.032808));
                }
            } else if(calculationMode == "Metric"){
                    this.bmi = weightKg / Math.Pow((heightCm / 100), 2);
                    if (this.bmi < 18.5)
                    {
                        this.category = "underweight";
                    }
                    else if (this.bmi >= 18.5 && this.bmi < 24.9)
                    {
                        this.category = "normalweight";
                    }
                    else if (this.bmi >= 25 && this.bmi <= 29.9)
                    {
                        this.category = "overweight";
                    }
                    else if (this.bmi > 30)
                    {
                        this.category = "obese";
                    }
                }
            }
        }
    }
}

如何检查c#中是否设置了类属性?

你可以让你的double属性为空,这样你可以比较null(默认)。

的例子:

public double? heightIn
{
    get { return _heightIn; }
    set {
        _heightIn = value;
        OnPropertyChanged("heightIn");
    }
}

在这种情况下,请确保更改相应私有变量的类型以匹配

您从未为您的属性设置默认值。由于double不可能是null,因此您可能需要对照0进行检查。以下划线开头的属性应该只是具有默认值的私有变量。还要考虑只在内部使用metric。

class BMICalc :INotifyPropertyChanged
    {
        private double _heightFt = 0;
        private double _heightIn = 0;
        private double _heightCm = 0;
        private double _weightLbs = 0;
        private double _weightKg = 0;
        private double _bmi = 0;
        private string _category = null;
        private string _error = null;
        public double heightFt
        {
            get { return _heightFt; }
            set
            {
                _heightFt = value;
                OnPropertyChanged("heightFt");
            }
        }
        public double heightIn
        {
            get { return _heightIn; }
            set
            {
                _heightIn = value;
                OnPropertyChanged("heightIn");
            }
        }
        public double heightCm
        {
            get { return _heightCm; }
            set
            {
                _heightCm = value;
                OnPropertyChanged("heightCm");
            }
        }
        public double weightLbs
        {
            get { return _weightLbs; }
            set
            {
                _weightLbs = value;
                OnPropertyChanged("weightLbs");
            }
        }
        public double weightKg
        {
            get { return _weightKg; }
            set
            {
                _weightKg = value;
                OnPropertyChanged("weightKg");
            }
        }
        public double bmi
        {
            get { return _bmi; }
            set
            {
                _bmi = value;
                OnPropertyChanged("bmi");
            }
        }
        public string error
        {
            get { return _error; }
            set
            {
                _error = value;
                OnPropertyChanged("error");
            }
        }
        public string category
        {
            get { return _category; }
            set
            {
                _category = value;
                OnPropertyChanged("category");
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName){
            if(PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        public void doCalculation(string calculationMode){
            if(calculationMode == "Imperial"){
                if (heightFt == null)
                {
                    this.error = "You must provide a value for your height in feet!";
                }
                else if (heightIn == null)
                {
                    this.error = "You must provide a value for your height in inches!";
                }
                else if (weightLbs == null)
                {
                    this.error = "You must provide a value for your weight in pounds!";
                }
                else
                {
                    heightFt = Convert.ToDouble(heightFt);
                    heightIn = Convert.ToDouble(heightIn);
                    weightLbs = Convert.ToDouble(weightLbs);
                    _weightKg = Convert.ToDouble(_weightLbs * (1 / 2.2));
                    _heightCm = Convert.ToDouble((_heightFt + (_heightIn / 12) / 0.032808));
                }
            } else if(calculationMode == "Metric"){
                    this.bmi = weightKg / Math.Pow((heightCm / 100), 2);
                    if (this.bmi < 18.5)
                    {
                        this.category = "underweight";
                    }
                    else if (this.bmi >= 18.5 && this.bmi < 24.9)
                    {
                        this.category = "normalweight";
                    }
                    else if (this.bmi >= 25 && this.bmi <= 29.9)
                    {
                        this.category = "overweight";
                    }
                    else if (this.bmi > 30)
                    {
                        this.category = "obese";
                    }
                }
            }
        }
    }
相关文章: