Kann nicht implizit konvertiert Typ 'string' zu 'lange' mit einem anderen Problem?
Ich habe ein kleines problem, ich habe keine Ahnung, wie das zu lösen ist. Werde ich der, der; - e code aus der Klasse, so dass Sie sehen können, was Ihr tun:
{
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(",", ", ");
}
Ich habe ein problem mit dieser Linie des Codes
dfr.TotalSingleScore = s.Split(',')[12];
TotalSingleScore ist die einzige int (alle anderen Zeichenketten sind) als Ergebnis bekomme ich diesen Fehler:
"Fehler 1 kann Nicht implizit konvertiert Typ 'string' zu 'lange'"
Wie gehe ich vor, dies zu lösen? Code ist C# - und software ist VS 2008 Pro
Dank
InformationsquelleAutor HadlowJ | 2011-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit TotalSingleScore erklärt wird als Int64 verwenden Sie Int64.Parse.
Beispiel:
dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);
InformationsquelleAutor HABJAN
verwenden
long.Parse
oderlong.TryParse
.natürlich. Ich lese nur int in seiner Beschreibung.
Sie irren sich.
int
ist 32-bit, ob Sie auf einem 32-bit-oder 64-bit-Maschine, so werden die Ergebnisse die gleichen.InformationsquelleAutor Femaref
dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);
Int64.TryParse()
InformationsquelleAutor Andrew T Finnell
Nehmen Sie Ihre string und konvertieren. Wie andere erklärte die TryParse-oder Parse-Methoden funktionieren hervorragend, wenn die Daten möglicherweise nicht das casting-Typ. Aber Sie können es auch tun, auf diese Weise mit System.Konvertieren.
http://msdn.microsoft.com/en-us/library/system.convert.toint64.aspx
Wahr ist jedoch Int64.Analysieren, nur einen string Konvertieren.ToInt64 wraps Geben.Analysieren, zu akzeptieren, andere Arten. Aber ich bevorzuge Parse oder TryParse mehr, einfach nur zu erwähnen das Sie einen anderen Weg.
InformationsquelleAutor Ryan Christensen
Einfach nur neugierig, warum Sie die Spaltung string everytime? Wäre es nicht besser, wenn Sie nur split ' es einmal und re-verwenden Sie die array?
Nicht eine Antwort auf deine Frage, aber ich dachte, ich hätte zu nahelegen.
InformationsquelleAutor detay