不能用其他问题隐式地将类型'string'转换为'long'?

时间:2011-01-05 18:32:04

标签: c# string long-integer

我有一点问题,我不知道如何解决。我将从课程中给出who; e代码,以便你可以看到它的作用:

{

class CompetitorDataFile
{
    //collection of DataFileRecords - people
    public List<DataFileRecord> DataFileRecords;
    public string FileName = "";

    //called when DataFile created
    public CompetitorDataFile(string FileName)
    {
        //creates the collection
        DataFileRecords = new List<DataFileRecord>();
        this.FileName = FileName;
    }

    //fill DataFileRecords with stuff from text file
    public void ReadDataFile()
    {
        foreach (string s in File.ReadAllLines(FileName))
        {
            if (s == "") continue;
            DataFileRecord dfr = new DataFileRecord();
            dfr.Name = s.Split(',')[0];
            dfr.CPSA = s.Split(',')[1];
            dfr.PostCode = s.Split(',')[2];
            dfr.Rank = s.Split(',')[3];
            dfr.Score1 = s.Split(',')[4]; //new for score system
            dfr.Score2 = s.Split(',')[5]; //new for score system 
            dfr.Score3 = s.Split(',')[6]; //new for score system 
            dfr.Score4 = s.Split(',')[7]; //new for score system 
            dfr.Score5 = s.Split(',')[8]; //new for score system 
            dfr.Score6 = s.Split(',')[9]; //new for score system 
            dfr.Score7 = s.Split(',')[10]; //new for score system 
            dfr.Score8 = s.Split(',')[11]; //new for score system
            dfr.TotalSingleScore = s.Split(',')[12]; //new for score system
            DataFileRecords.Add(dfr);
        }
    }

    public int FindByCPSA(string CPSA)
    {
        //set index to 0
        int index = 0;
        //go through each record looking for CPSA number match
        foreach (DataFileRecord dfr in DataFileRecords)
        {
            if (dfr.CPSA.ToLower() == CPSA.ToLower())
            {
                //if it's found return the current index
                return index;
            }
            //increase index and move to next record
            index++;
        }
        //not found returning -1
        return -1;
    }

    //save DataFile records to text file
    public void SaveDataFile()
    {
        //delete backup file if found
        if (File.Exists(FileName+".bck")) 
            File.Delete(FileName+".bck");
        //make backup of existing
        if (File.Exists(FileName))
            File.Move(FileName, FileName + ".bck");
        //create a temporary array of string
        List<string> stringy = new List<string>(DataFileRecords.Count);
        //go through each DataFile record and create a single string line
        foreach (DataFileRecord dfr in DataFileRecords)
            stringy.Add(dfr.SingleString);
        //saves all strings to file
        File.WriteAllLines(FileName, stringy.ToArray());
    }
}

//a single record - one person
public class DataFileRecord
{
    public string Name;
    public string CPSA;
    public string PostCode;
    public string Rank;
    public string Score1; //new for score system
    public string Score2; //new for score system
    public string Score3; //new for score system
    public string Score4; //new for score system
    public string Score5; //new for score system
    public string Score6; //new for score system
    public string Score7; //new for score system
    public string Score8; //new for score system
    public Int64 TotalSingleScore; // used to get total score for one user

    public string SingleString
    {
        get
        {
            return string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", Name, CPSA, PostCode, Rank, Score1, Score2, Score3, Score4, Score5, Score6, Score7, Score8); //,{4} and , Score are new for score system
        }
    }

    public string PoshSingleString
    {
        get
        {
            return string.Format("{0,-20}|{1,-10}|{2,-9}|{3,-9}|{4,2}|{5,2}|{6,2}|{7,2}|{8,2}|{9,2}|{10,2}|{11,2}", Name, CPSA, PostCode, Rank, Score1, Score2, Score3, Score4, Score5, Score6, Score7, Score8);
            //return SingleString.Replace(",0", ""); //may be used to replace 0
            //return SingleString.Replace(",", ", ");
        }

我对这行代码有疑问

dfr.TotalSingleScore = s.Split(',')[12];

TotalSingleScore是唯一的int(所有其他都是字符串),因此我收到此错误: “错误1无法将类型'string'隐式转换为'long'”

我该如何解决这个问题? 代码是C#,软件是VS 2008 Pro

由于

5 个答案:

答案 0 :(得分:11)

使用long.Parselong.TryParse

答案 1 :(得分:3)

由于TotalSingleScore被声明为Int64,您必须使用Int64.Parse。

示例:dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);

答案 2 :(得分:2)

dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);

Int64.TryParse()

答案 3 :(得分:0)

拿你的字符串并转换它。与其他人一样,如果数据可能不是转换类型,则TryParse或Parse方法可以很好地工作。但是你也可以使用System.Convert这样做。

dfr.TotalSingleScore = Convert.ToInt64(s.Split(',')[12]);

http://msdn.microsoft.com/en-us/library/system.convert.toint64.aspx

答案 4 :(得分:0)

好奇,你为什么每次分裂字符串?如果你只拆分一次并重新使用阵列会不会更好?

    var myArray = s.split(',');
    dfr.Name = myArray[0];
    dfr.CPSA = myArray[1];
    dfr.PostCode = myArray[2];
    dfr.Rank = myArray[3];
    dfr.Score1 = myArray[4]; //new for score system
    dfr.Score2 = myArray[5]; //new for score system 
    dfr.Score3 = myArray[6]; //new for score system 
    dfr.Score4 = myArray[7]; //new for score system 
    dfr.Score5 = myArray[8]; //new for score system 
    dfr.Score6 = myArray[9]; //new for score system 
    dfr.Score7 = myArray[10]; //new for score system 
    dfr.Score8 = myArray[11]; //new for score system
    :
    etc

不是你问题的答案,但我认为我必须建议这个。