繁体   English   中英

将字符串转换为int会产生编译错误?

[英]converting a string to an int gives a compile error?

看完SO上的一些“如何将字符串转换为int”文章之后,我求助于使用;

public MyObject(Object parObject)
{
    this.VersionInt = Convert.ToInt32(this.parObject.VersionString);
    // object has a field called 'VersionString' which holds a 
    // string-typed version number (1.0, 2.3, etc.)
}

public int VersionInt{ get; set; }

但是,我收到了编译消息“无法将类型'int'隐式转换为'string'。这不正是该方法应该执行的操作,从而使编译错误过时了吗?

我很抱歉,如果这是某件事的重复,但是我找不到其他人遇到同样的问题。 可能是因为我忽略了一些明显的问题。

像这样将其转换为double并转换为int;

this.VersionInt = (int)Convert.ToDouble(this.parObject.VersionString);

要么

this.VersionInt = (Int32)Convert.ToDouble(this.parObject.VersionString);

给我同样的信息

编辑:因为每个人都告诉我,伪名称比澄清更令人困惑,这是实际的代码;

private EA.Element element;

public Requirement(EA.Element element)
{
    this.element = element;
    this.Status = (int)Convert.ToDouble(this.element.Status);
}

public string Status { get; set; }

this.element.Status是一个string 毫无疑问,那里是因为编译器告诉我,所以当我将其悬停时,编译器会告诉我。 string EA.IDualElement.Status { get; set; }

另一个编辑:可能是因为我忽略了明显的东西。可能是因为我忽略了明显的东西。可能是因为我忽略了明显的东西。可能是因为我忽略了明显的东西。可能是因为我忽略了明显的东西..可能是因为我忽略了明显的东西..可能是因为我忽略了明显的东西..

可能是因为在工作结束时,我开始将Version-types转换为Status-types。.非常抱歉,您抽出宝贵的时间,我要再喝杯咖啡

您确定会收到cpmpiler错误吗? 我想您在执行代码时遇到错误,使之成为运行时错误。 特别是您不能将"1.2"转换为整数,因为它是double精度整数(如果有的话)。 因此,您必须将其拆分为. 使用String.Split

string[] numbers = mthis.parObject.VersionString.Split('.');
this.VersionMajor = Convert.ToInt32(numbers[0]);
this.VersionMinor = Convert.ToInt32(numbers[1]);

无论如何,为什么不简单地使用Version -class来为您提供所有这些功能呢?

Version version;
if(Version.TryParse("1.2", out version)) { ... };

这很令人困惑,因为实际上您无法获得该代码中提到的错误。 当您显示的代码将字符串转换为int时,为什么编译器为什么会抱怨无法将int转换为string?

但是,由于您使用的版本根本不是整数。 您应该拥有一个Version实例或至少多个int properties,例如MajorMinor

要创建一个版本,可以使用Version.TryParse

// note that i've changed Object to MyObject 
public MyObject(MyObject parObject)
{
    Version v;
    if(Version.TryParse(parObject.VersionString, out v))
    {
        this.Version = v;
    }
    else
        throw new ArgumentException("invalid version: " + parObject.VersionString);
}

public Version Version { get; set; }

为此使用TryParse方法。

    var intAsString = "99";
    var intAsInt = 0;
    if(!TryParse(intAsString, out intAsInt))
    {
        //Didn't parse int properly.
    }

暂无
暂无

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

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