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()
Author by
HadlowJ
Updated on July 09, 2022Comments
-
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 about 13 yearsThis 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 about 13 yearsConvert.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 about 13 yearsTrue 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 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.