我有一点问题,我不知道如何解决。我将从课程中给出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
由于
答案 0 :(得分:11)
使用long.Parse
或long.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
不是你问题的答案,但我认为我必须建议这个。