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

时间:2016-09-19 13:56:34

标签: c# type-conversion

查看了一些'如何将字符串转换为int'关于SO的帖子,我使用了;

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'到'字符串'。 是不是该方法应该做什么,从而使编译错误过时了?

如果这在某种程度上与某些内容重复,我表示道歉,但我无法找到遇到同样问题的其他人。可能是因为我忽略了一些明显的事情......

将其转换为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.Statusstring。毫无疑问,因为当我将它悬停时,编译器会告诉我; (string EA.IDualElement.Status { get; set; }

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

可能是因为在我工作日结束时我开始将版本类型转换为状态类型..我非常抱歉占用你的时间,我会让自己另一个咖啡

3 个答案:

答案 0 :(得分:0)

你确定你得到 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 - 这个开箱即用的所有这些?

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

答案 1 :(得分:0)

令人困惑,因为实际上你无法得到你用该代码提到的错误。当你显示的代码将字符串转换为int时,为什么编译器会抱怨他不能将int转换为字符串?

但是,因为您使用的版本根本不是整数。您应该拥有Version个实例或至少多个int - 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; }

答案 2 :(得分:-3)

使用TryParse方法。

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