【问题标题】:C# Convert String to IntegerC# 将字符串转换为整数
【发布时间】:2014-03-06 23:12:09
【问题描述】:

我终于从 VB.net 跳到了 C#,所以我仍然遇到一些问题。我正在制作一个通过 RSS 提要连接的简单天气应用程序。但是,我希望它返回一个标签,以确定它是否在外面冻结;我在将温度字符串转换为整数时遇到问题,因此我可以确定温度是否小于或等于 32 度。有什么想法吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace WeatherApp
{
    public partial class frmWeather : Form
    {
        string Temperature;
        public frmWeather()
        {
            InitializeComponent();
        }
        private void getWeather()
        {
            string query = string.Format("http://weather.yahooapis.com/forecastrss?w=" + txtZip.Text);
            XmlDocument wData = new XmlDocument();
            wData.Load(query);
            XmlNamespaceManager manager = new XmlNamespaceManager(wData.NameTable);
            manager.AddNamespace("yweather", "http://xml.weather.yahoo.com/ns/rss/1.0");
            XmlNode channel = wData.SelectSingleNode("rss").SelectSingleNode("channel");
            XmlNodeList nodes = wData.SelectNodes("/rss/channel/item/yweather:forecast", manager);
            Temperature = channel.SelectSingleNode("item").SelectSingleNode("yweather:condition", manager).Attributes["temp"].Value;
        }
        private void tmrWeather_Tick(object sender, EventArgs e)
        {
            getWeather();
            DateTime now = DateTime.Now;
            lblTemp.Text = "" + Temperature;
            if (lblTemp.Text <= "32")
            {
                lblResult.Text = "It is freezing outside!";
            }
        }
    }
}

【问题讨论】:

  • “问题”是什么?
  • 抱歉,我的标题有错字。该值当前不是整数,而是字符串。所以我不能使用像 这样的比较对象
  • 也看看this post。如果此处的答案解决了您的问题,请不要忘记将其标记为已接受(并最终投票)!
  • 必须停止思考 vb 和 C# 开始思考 .Net 伙伴

标签: c# string int type-conversion


【解决方案1】:

您可以使用Convert.ToInt32() 方法将您的String 转换为integer

试试这个:

      //lblTemp.Text = "" + Temperature;  this statement is not required.
      if (Convert.ToInt32(Temperature) <= 32)
        {
            lblResult.Text = "It is freezing outside!";
        }

即使数据无效,您也可以使用int.TryParse()方法进行正确的转换。

试试这个:

        int temp;
        if (int.TryParse(Temperature,out temp))
        {
             if(temp <= 32)             
             lblResult.Text = "It is freezing outside!";
        }

【讨论】:

  • 工作。非常感谢。
  • @Joshua:不客气 :),别忘了接受其中一个答案
【解决方案2】:

将其转换为整数,然后与32比较?

if (Convert.ToInt32(lblTemp.Text) <= 32)

或者只使用 Temperature 整数变量

if(Convert.ToInt32(Temperature) <= 32)

这一行毫无意义:

lblTemp.Text = "" + Temperature;

您可能希望将Temperature 定义为integerdouble

【讨论】:

    【解决方案3】:

    另一种有效的方法是

    int temp = 0;
    if (int.TryParse(lblTemp.Text, out temp))
    {
         lblResult.Text = temp < 32 ? "It's freezing outside" : "Not yet freezing";
    }
    else
    {
        // parsing error
    }
    

    Convert.ToInt()int.parse() 也可以工作,但int.TryParse() 也可以防止出现异常,以防lblTemp.Text 不包含有效整数。然而,所有这些方法都解决了您最初的问题,即一旦您将字符串解析为数字,您就可以将它们与固定值进行比较。

    【讨论】:

      【解决方案4】:

      如果温度是整数,那么不要使用字符串来保持它的值。保持温度为整数(或双精度)类型:

      int Temperature;
      

      并用它与整数值 32 进行比较:

      private void tmrWeather_Tick(object sender, EventArgs e)
      {
          getWeather();
          DateTime now = DateTime.Now;
          lblTemp.Text = Temperature.ToString();
      
          if (Temperature <= 32)        
              lblResult.Text = "It is freezing outside!";        
      }
      

      另外我建议你使用 Linq to Xml 进行解析:

      XDocument xdoc = XDocument.Load(query);
      XNamespace yweather = "http://xml.weather.yahoo.com/ns/rss/1.0";
      Temperature = (int)xdoc.Descendants("rss")
                             .Elements("channel")
                             .Elements("item")
                             .Element(yweather + "forecast")
                             .FirstOrDefault();
      

      如果你不想改变你的实现,那么只需解析临时值:

      string temp = channel.SelectSingleNode("item")
                           .SelectSingleNode("yweather:condition", manager)
                           .Attributes["temp"].Value;
      Temperature = Int32.Parse(temp);
      

      注意:我建议你使用int GetTemperature() 方法而不是void getWeather() 方法,因为方法名称表明它是查询方法,它应该返回一些值而不是改变类状态(可能你会在这种情况下不需要Temperature 字段)。此外,代替硬编码值 32 创建一些常量整数值,其名称描述了 32 的含义。最后 - 使用微软建议的Capitalization Styles

      【讨论】:

        【解决方案5】:

        Number("123") 为我工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-08
          • 1970-01-01
          • 2011-04-21
          • 2011-12-27
          • 2021-08-15
          相关资源
          最近更新 更多