我有一个小问题,我不知道如何解决。我将给出该类的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(其他都是字符串),结果我得到了这个错误:"Error 1 Cannot implicitly convert type 'string' to 'long'"。
我怎么去解决这个问题?代码是C#,软件是VS 2008 Pro
谢谢你
由于TotalSingleScore被声明为Int64,所以你必须使用Int64.Parse。
Sample: dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);
使用 long.Parse
或 long.TryParse
.
dfr.TotalSingleScore = Int64.Parse(s.Split(',')[12]);
Int64.TryParse()
把你的字符串并转换它。 就像其他人说的那样,如果数据可能不是铸造类型,TryParse或Parsse方法就很好用。 但你也可以用System.Convert.这样做。
dfr.TotalSingleScore = Convert.ToInt64(s.Split(',')[12]);
http:/msdn.microsoft.comen-uslibrarysystem.convert.toint64.aspx。
只是好奇,为什么每次都要拆分字符串?如果你只拆分一次并重复使用数组不是更好吗?
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
这不是你问题的答案,但我想我必须提出这个建议。