Cannot implicitly convert type 'string' to 'long' with other issue?

24,905

Solution 1

Since TotalSingleScore is declared as Int64, you have to use Int64.Parse.

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

Solution 2

use long.Parse or long.TryParse.

Solution 3

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

Int64.TryParse()

Share:
24,905
HadlowJ
Author by

HadlowJ

Updated on July 09, 2022

Comments

  • HadlowJ
    HadlowJ over 1 year

    I have a little problem which I have no clue how to solve. I will give the who;e code from the class so you can see what its doing:

    {

    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(",", ", ");
            }
    

    I have a problem with this line of code

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

    TotalSingleScore is the only int (all others are strings) as a result I get this error: "Error 1 Cannot implicitly convert type 'string' to 'long'"

    How do I go about solving this? Code is C# and software is VS 2008 Pro

    Thanks

  • Andrew T Finnell
    Andrew T Finnell about 13 years
    This would yield a different result whether ran on a 32-bit and 64-bit machine. He is explicitly using a Int64 in which Int64.parse return a long. int.Parse() != long.Parse()
  • HABJAN
    HABJAN about 13 years
    Convert.ToInt64(string) internally calls Int64.Parse(string). However, if you use Int64.Parse (or the equivalent int.Parse), you can specify globalization and formatting used when parsing.
  • Jobayer Ahmed Mickey
    Jobayer Ahmed Mickey about 13 years
    True however Int64.Parse only takes a string and Convert.ToInt64 wraps Type.Parse to accept other types. But I prefer Parse or TryParse moreso, just mentioning the other way.
  • svick
    svick over 12 years
    @Andrew, you're wrong. int is 32-bit whether you are on a 32-bit or 64-bit machine, so the results will be the same.