不能隐式将类型'string'转换为'long'与其他问题?

问题描述 投票:1回答:5

我有一个小问题,我不知道如何解决。我将给出该类的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

谢谢你

c# string long-integer
5个回答
4
投票

由于TotalSingleScore被声明为Int64,所以你必须使用Int64.Parse。

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


11
投票

使用 long.Parselong.TryParse.


2
投票

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

Int64.TryParse()


0
投票

把你的字符串并转换它。 就像其他人说的那样,如果数据可能不是铸造类型,TryParse或Parsse方法就很好用。 但你也可以用System.Convert.这样做。

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

http:/msdn.microsoft.comen-uslibrarysystem.convert.toint64.aspx。


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

这不是你问题的答案,但我想我必须提出这个建议。

© www.soinside.com 2019 - 2024. All rights reserved.