簡體   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