解决 字符串比较会导致错误消息

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
我有一个字符串,我想将它的内容与记录列表中的字符串进行比较,我收到以下错误:
严重性代码说明项目文件线抑制状态
错误CS0019运算符'=='无法应用于类型“arraylist”和'String'Toto C:\ Users \ Dell \ Source \ Repos \ Toto \ Toto \ Program.cs 130的操作数

字符串比较记录列表字符串:
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace toto
{
    class Rekord
    {
        public string ev { get; set; }
        public string het { get; set; }
        public string fordulo { get; set; }
        public string Ndarab13p1talalat { get; set; }
        public string egydbtelitalalat { get; set; }
        public string eredmenyek { get; set; }
        public long ossznyeremeny { get; set; }
    }
   
    class beolvasas
    {
        static int db = 0;
        static int telitalalatok = 0;
        static int fordulo = 0;
        static int egyfrd = 0;

        public List<Rekord> rlista = new List<Rekord>();
        public ArrayList minmax = new ArrayList();
        public void beolvas()
        {
            string olvas = @"c:\Users\Public\textfiles\toto.txt";
            using (StreamReader sr = new StreamReader(olvas, Encoding.Default))
            {
                string ev;
                string het;
                string egydbtelitalalat;
                sr.ReadLine();
                while (!sr.EndOfStream)
                {
                    string[] sor = sr.ReadLine().Split(';');
                   
                    Rekord adat = new Rekord();
                   
                    adat.ev = sor[0];
                    adat.het = sor[1];
                    adat.fordulo = sor[2];
                    adat.Ndarab13p1talalat = sor[3];
                    adat.egydbtelitalalat = sor[4];
                    adat.eredmenyek = sor[5];
                    adat.ossznyeremeny = Int32.Parse(adat.Ndarab13p1talalat)*Int32.Parse(adat.egydbtelitalalat);
                    if (Int32.Parse(adat.fordulo) == 1)
                    {
                        egyfrd = egyfrd + 1;
                        // Console.WriteLine(" 1 Fordulo " + adat.fordulo);
                        minmax.Add(Int32.Parse(adat.egydbtelitalalat));
                    }
                    rlista.Add(adat);
                    db++;

                }
                Console.WriteLine(" 1 Fordulo " + egyfrd);
                Console.WriteLine(db);
               
                //Random rd = new Random();
                //int rand_num = rd.Next(1, db);
            }
        }


        public void kiir()
        {
            //int csere = 0;
            long osszeg = 0;
            double atlag = 0;
            for (int i= 0; i<db;i++)
            {
                Console.WriteLine(" ");
                // rekordlista adat = new rekordlista();
               
               Console.WriteLine(
                    " Ev " + rlista[i].ev +
                    " Het " + rlista[i].het +
                    " Fordulo " + rlista[i].fordulo +
                    " N darab 13 + 1 " + rlista[i].Ndarab13p1talalat +
                    " Egy db telitalalat/osszeg  " + rlista[i].egydbtelitalalat +
                    " Eredmeny " + rlista[i].eredmenyek);
               
                    fordulo = fordulo + Int32.Parse(rlista[i].fordulo);
                    telitalalatok = telitalalatok + Int32.Parse(rlista[i].Ndarab13p1talalat);
                    osszeg = osszeg + rlista[i].ossznyeremeny;

            }
            atlag = osszeg / db;
            Console.WriteLine();
           Console.WriteLine(
                   " 3 Feledat: Fordulo szama    " + fordulo);
            Console.WriteLine(
                    " 4 Feledat: 13 + 1-es \n   talalatok szama           " + telitalalatok);
            Console.WriteLine(
                   " 5 Feledat: Atlag nyeremeny  " + atlag);
            int index = 0;
            minmax.Sort();
            int utolso = 0;
            int indexmin = 0;
            int a = 0;
            foreach (int n in minmax)
              {
                index++;
               
                  //Console.WriteLine(" minmax " + n+" indexmin "+ indexmin + " index " + index);
                if (n > 0)
                {
                    a++;
                    if (a < 2)
                    {
                        indexmin = index;
                    }
                }
                  utolso = n;
              }
            Console.WriteLine(" 6 Feledat: max. nyeremeny   " + utolso + "  index " + index);
            Console.WriteLine(" 7 Feledat: min. nyeremeny   " + minmax[indexmin-1] + "      indexmin " + indexmin);
            Console.WriteLine(" minmaxst " + minmax);
            string minmaxst = " ";
            minmaxst = Convert.ToString(minmax);
            for (int i = 0; i < db; i++)
            {
                //ev = rlista[i].ev;
                minmaxst = rlista[i].egydbtelitalalat;
                if (minmax == minmaxst)
                {
                    Console.WriteLine(" minmaxst " + minmaxst);
                 

                }
                Console.WriteLine(" osszeg " + rlista[i].egydbtelitalalat);
               
            }
            /*
            for (int i = 0;i < minmax.Count; i++)
            {
                for (int j = 1; j < minmax.Count; j++)
                {
                   if(minmax[i] < minmax[j - 1])
                    {
                        csere = minmax[i];
                    }
                }
                Console.WriteLine(
                  " minmax " + minmax[i]);
            }*/
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            beolvasas kiir1 = new beolvasas();
            kiir1.beolvas();
            kiir1.kiir();
            Console.WriteLine("Hello World!");
        }
    }
}
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
错误是正确的。您无法将ArrayList与单个字符串进行比较。这就像试图将砖墙与一块砖头进行比较。

除了旁边,我认为这是我第二次见过你使用ArrayList的代码。 ArrayLists在C#中脱离了主动使用,因为关于.NET Framework 2.0。如果您的书或教程教您这一点,它是严重的过时,或者是一本书或教程,它已从Java转到C#,并且没有考虑语言所使用方式的更改。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
喜欢 an list/collection, an ArrayList is a list of items. It doesn't make sense to compare a string to that list. What makes sense is to compare it to an item in that list, or perhaps each item in the list in turn, one at a time. As always when it comes to programming, think about how you do the same thing manually. If you had a list of names and you wanted to see whether a specific name was on that list, wouldn't you compare that specific name to each name on the list one by one? Of course you would, so why would it be different in code?

As suggested, you should not be using an ArrayList for anything these days. Generics were introduced in .NET in version 2.0 and, since then, you should use a List<T>. If you want to store string objects, a List<string> is specifically what you want.
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
Like an list/collection, an ArrayList is a list of items. It doesn't make sense to compare a string to that list. What makes sense is to compare it to an item in that list, or perhaps each item in the list in turn, one at a time. As always when it comes to programming, think about how you do the same thing manually. If you had a list of names and you wanted to see whether a specific name was on that list, wouldn't you compare that specific name to each name on the list one by one? Of course you would, so why would it be different in code?

As suggested, you should not be using an ArrayList for anything these days. Generics were introduced in .NET in version 2.0 and, since then, you should use a List<T>. If you want to store string objects, a List<string> is specifically what you want.
谢谢你的帮助。我替换ArrayList但是我的建议,但我收到错误:
严重性代码说明项目文件线抑制状态
错误CS0246无法找到“类型”或命名空间名称“nyeremeny2”(您是否缺少使用指令或装配参考?)Toto C:\ Users \ Dell \ Source \ Repos \ Toto \ Toto \ Program.CS 29 Active
我可以得到帮助吗?谢谢。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
根本没有办法发布的代码生成了那些错误消息,因为该名称在该代码中无处可行,因此您希望我们帮助您解决我们从未见过的代码。您需要发布相关代码,我们不应该要求这一点。
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
根本没有办法发布的代码生成了那些错误消息,因为该名称在该代码中无处可行,因此您希望我们帮助您解决我们从未见过的代码。您需要发布相关代码,我们不应该要求这一点。
谢谢你的帮助。那部分成功修复,我有学校的帮助,
列表必须是字符串类型,不使用声明的字符串的名称。但我有另一个我会发布它,
在主程序中调用一个类我得到错误,我不明白,请帮帮我,谢谢。
toto:
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace toto
{
    class Rekord
    {
        public string ev { get; set; }
        public string het { get; set; }
        public string fordulo { get; set; }
        public string Ndarab13p1talalat { get; set; }
        public string egydbtelitalalat { get; set; }
        public string eredmenyek { get; set; }
        public long ossznyeremeny { get; set; }
    }
    
    class beolvasas
    {
        static int db = 0;
        static int telitalalatok = 0;
        static int fordulo = 0;
        static int egyfrd = 0;
        
        public List<Rekord> rlista = new List<Rekord>();
        public List<int> minmax = new List<int>();
        public void beolvas()
        {
            string olvas = @"c:\Users\Public\textfiles\toto.txt";
            using (StreamReader sr = new StreamReader(olvas, Encoding.Default))
            {
                sr.ReadLine();
                while (!sr.EndOfStream)
                {
                    string[] sor = sr.ReadLine().Split(';');
                    
                    Rekord adat = new Rekord();
                    
                    adat.ev = sor[0];
                    adat.het = sor[1];
                    adat.fordulo = sor[2];
                    adat.Ndarab13p1talalat = sor[3];
                    adat.egydbtelitalalat = sor[4];
                    adat.eredmenyek = sor[5];
                    adat.ossznyeremeny = Int32.Parse(adat.Ndarab13p1talalat)*Int32.Parse(adat.egydbtelitalalat);
                    if (Int32.Parse(adat.fordulo) == 1)
                    {
                        egyfrd = egyfrd + 1;
                        // Console.WriteLine(" 1 Fordulo " + adat.fordulo);
                        minmax.Add(Int32.Parse(adat.egydbtelitalalat));
                    }
                    rlista.Add(adat);
                    db++;

                }
                Console.WriteLine(" 1 Fordulo " + egyfrd);
                Console.WriteLine(db);
                
                //Random rd = new Random();
                //int rand_num = rd.Next(1, db);
            }
        }


        public void kiir()
        {
            //int csere = 0;
            long osszeg = 0;
            double atlag = 0;
            int minnyeremeny = 0;
            string minmaxst = " ";
            for (int i= 0; i<db;i++)
            {
                Console.WriteLine(" ");
                // rekordlista adat = new rekordlista();
                
               Console.WriteLine(
                    " Ev " + rlista[i].ev +
                    " Het " + rlista[i].het +
                    " Fordulo " + rlista[i].fordulo +
                    " N darab 13 + 1 " + rlista[i].Ndarab13p1talalat +
                    " Egy db telitalalat/osszeg  " + rlista[i].egydbtelitalalat +
                    " Eredmeny " + rlista[i].eredmenyek);
                
                    fordulo = fordulo + Int32.Parse(rlista[i].fordulo);
                    telitalalatok = telitalalatok + Int32.Parse(rlista[i].Ndarab13p1talalat);
                    osszeg = osszeg + rlista[i].ossznyeremeny;

            }
            atlag = osszeg / db;
            Console.WriteLine();
           Console.WriteLine(
                   " 3 Feledat: Fordulo szama    " + fordulo);
            Console.WriteLine(
                    " 4 Feledat: 13 + 1-es \n   talalatok szama           " + telitalalatok);
            Console.WriteLine(
                   " 5 Feledat: Atlag nyeremeny  " + atlag);
            int index = 0;
            minmax.Sort();
            int utolso = 0;
            int indexmin = 0;
            int a = 0;
            foreach (int n in minmax)
              {
                index++;
                
                 // Console.WriteLine(" minmax " + n+" indexmin "+ indexmin + " index " + index);
                if (n > 0)
                {
                    a++;
                    if (a < 2)
                    {
                        indexmin = index;
                    }
                }
                  utolso = n;
              }
            Console.WriteLine(" 6 Feledat: Legnagyobb nyeremeny   ");
            for (int i = 0; i < db; i++)
            {
                //ev = rlista[i].ev;
                minmaxst = rlista[i].egydbtelitalalat;
                if (utolso == Int32.Parse(minmaxst))
                {
                    Console.WriteLine(" Ev         " + rlista[i].ev);
                    Console.WriteLine(" Het        " + rlista[i].het);
                    Console.WriteLine(" Fordulo    " + rlista[i].fordulo);
                    Console.WriteLine(" Nyeremeny  " + rlista[i].egydbtelitalalat);
                    Console.WriteLine(" Eredmeny   " + rlista[i].eredmenyek);
                }
                //Console.WriteLine(" osszeg " + rlista[i].egydbtelitalalat);

            }
            //Console.WriteLine(" 7 Feledat: min. nyeremeny   " + minmax[indexmin-1] + "      indexmin " + indexmin);
            Console.WriteLine(" 7 Feledat: Legkissebb nyeremeny   ");
            Console.WriteLine();

            //minmaxst = Convert.ToString(minmax);
            minnyeremeny = minmax[indexmin - 1];
            for (int i = 0; i < db; i++)
            {
                //ev = rlista[i].ev;
                minmaxst = rlista[i].egydbtelitalalat;
                if (minnyeremeny == Int32.Parse(minmaxst))
                {
                    Console.WriteLine(" Ev         " + rlista[i].ev);
                    Console.WriteLine(" Het        " + rlista[i].het);
                    Console.WriteLine(" Fordulo    " + rlista[i].fordulo);
                    Console.WriteLine(" Nyeremeny  " + rlista[i].egydbtelitalalat);
                    Console.WriteLine(" Eredmeny   " + rlista[i].eredmenyek);
                }
                //Console.WriteLine(" osszeg " + rlista[i].egydbtelitalalat);
                
            }
            /*
            for (int i = 0;i < minmax.Count; i++)
            {
                for (int j = 1; j < minmax.Count; j++)
                {
                   if(minmax[i] < minmax[j - 1])
                    {
                        csere = minmax[i];
                    }
                }
                Console.WriteLine(
                  " minmax " + minmax[i]);
            }*/
        }
    }

    class EredmenyElemzo
    {
        private string Eredmenyek;

        private int DontetlenekSzama
        {
            get
            {
                return Megszamol('X');
            }
        }

        private int Megszamol(char kimenet)
        {
            int darab = 0;
            foreach (var i in Eredmenyek)
            {
                if (i == kimenet) darab++;
            }
            return darab;
        }

        public bool NemvoltDontetlenMerkozes
        {
            get
            {
                return DontetlenekSzama == 0;
            }
        }

        public EredmenyElemzo(string eredmenyek) // konstruktor
        {
            Eredmenyek = eredmenyek;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            beolvasas kiir1 = new beolvasas();
            kiir1.beolvas();
            kiir1.kiir();
            EredmenyElemzo eredmeny1 = new EredmenyElemzo();
            //Console.WriteLine("Hello World!");
        }
    }
}
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
你遇到了什么错误?
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
你遇到了什么错误?
谢谢你的帮助。错误是eredmenyelemzo()的新建后
严重性代码说明项目文件线抑制状态
错误CS7036没有给出的参数,它对应于'eredmenyelemzo.eredmenyelemzo(string)'toto c:\ desers \ dell \ source \ repos \ toto \ toto \ program.cs 215活动的所需的正式参数'eredmenyek'。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
查看第203行的构造函数。它要求您传入字符串。看看你的第215行你正在调用的构造函数。你为什么不在一个字符串?

我刚刚在上面的段落中写的只是重新编写编译器给你的错误消息。学习编程语言的一部分也在学习如何理解它给您的错误消息。花点时间分析它所说的而不是刚刚呕吐你的手,并询问他人自动帮助。 (是的,我知道 - 一些政府和机构不鼓励自己的这种思考,但在软件开发的情况下,非常鼓励为自己思考。)
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
查看第203行的构造函数。它要求您传入字符串。看看你的第215行你正在调用的构造函数。你为什么不在一个字符串?

我刚刚在上面的段落中写的只是重新编写编译器给你的错误消息。学习编程语言的一部分也在学习如何理解它给您的错误消息。花点时间分析它所说的而不是刚刚呕吐你的手,并询问他人自动帮助。 (是的,我知道 - 一些政府和机构不鼓励自己的这种思考,但在软件开发的情况下,非常鼓励为自己思考。)
谢谢你。我设法解决了它。最后一个问题是我无法插入图形任务的表单,开发人员工具不允许我。我有Visual Studio 2019.你能帮我吗?谢谢你。
 
Last edited:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
打开一个关于您对新问题的问题的新线程。如果您使用的是WinForms,请在WinForms子汇率下打开问题。如果您使用的是WPF,请在WPF子核查下打开问题。如果您使用的是使用ASP.NET MVC,请在MVC子汇位下打开问题。我希望你拍照。 (双关语)
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
打开一个关于您对新问题的问题的新线程。如果您使用的是WinForms,请在WinForms子汇率下打开问题。如果您使用的是WPF,请在WPF子核查下打开问题。如果您使用的是使用ASP.NET MVC,请在MVC子汇位下打开问题。我希望你拍照。 (双关语)
谢谢你的帮助。正如我理解的那样,我应该以Windows形式开始。
 
最佳 底部