运算符'> ='不能应用于'string'和'int'类型的操作数[重复]

Posted

技术标签:

【中文标题】运算符\'> =\'不能应用于\'string\'和\'int\'类型的操作数[重复]【英文标题】:Operator '>=' cannot be applied to operands of type 'string' and 'int' [duplicate]运算符'> ='不能应用于'string'和'int'类型的操作数[重复] 【发布时间】:2020-04-18 02:06:53 【问题描述】:

我对 C# 很陌生,一直在寻找有关使用 Int32.Parse、Int32.TryParse、Convert.Int32 等将字符串转换为整数的解决方案。但是我找不到合适的解决方案来接近我想要的.我在这里找到了类似的帖子:Operator '>=' cannot be applied to operands of type 'string' and 'string',但仍然找不到正确的解决方案。

这是我要编写的代码的简要说明。

    打开一个名为“compare.xls”的Excel文件,读取文件并写入一个名为“tline.txt”的文本文件

    然后打开文本文件“tline.txt”,逐行读取文本,只写入带有条件语句的名为“mkmatlab.txt”的文本文件。条件语句:如果从该行读取的数字是25

对 Excel 文件内容的想法:

A1..|  B1....... |  C1........ | D1........| E1........|      
0.1 |10.2000    |53.6000    |52.7894    |24.9608                                        
0.2 |26.8209    |55.0851    |56.4726    |35.8431                                    
0.3 |10.1009    |56.0314    |56.5013    |27.8922                                    
0.4 |17.7008    |60.0054    |59.7650    |37.8018    

*符号 .. 和 |这里只是作为间距,Excel文件或文本文件不包含任何这些符号。

说明: 第一行包含 A1 到 E1。 A1 列包含 0.1 到 0.4,B1 到 E1 列以此类推。

我在这条线上有评论

if (words1[t] >= 25 && words1[t] <= 50)

我需要帮助的地方。

StreamReader fidin = File.OpenText(@"C:\Users\Student\Downloads\compare.xls");
StreamWriter tline = File.CreateText(@"C:\Users\Student\Downloads\tline.txt"); 

string F = fidin.ReadToEnd();
fidin.Close();

string[] words = F.Split(';');
Array.Sort(words);

for (int f = 0; f < words.Length; f++)
     tline.WriteLine(words[f]);
tline.Close();

StreamReader tline1 = File.OpenText(@"C:\Users\Student\Downloads\tline.txt");
StreamWriter fidout = File.CreateText(@"C:\Users\Student\Downloads\mkmatlab.txt");

string T = tline1.ReadToEnd();
            tline1.Close();

            string[] words1 = T.Split(';');
            Array.Sort(words1);

            int counter = 0;
            string line;

            while ((line = tline1.ReadLine()) != null)
            
                System.Console.WriteLine(line);
                fidout.WriteLine(line);
                counter++;
                Console.ReadKey();
            

【问题讨论】:

"some string" &gt;= 25 对编译器意味着什么?你在哪里尝试使用int.Parse 但是,这是一个(旧)Excel 文件,.xls(二进制)还是.csv(文本)文件?如果它实际上是一个 CSV 文件,请使用现有的解析器。如果没有,您如何使用File.OpenText() 阅读它?您可以为这两种格式使用ACE.OleDb Provider。 @Selvin 对不起,我不太明白你的问题,现在无法回答你的问题......我刚刚开始通过阅读文档学习 C#(差不多 2 周),但仍然无法完全理解一些 C# 语法和关键字,但我确实尝试过使用 Soner Gonul 建议的 double.Parse。现在我可以将它用于 if 语句了。 @Jimi 是的,这是一个旧的 Excel 文件 97-2003。感谢您的建议和帮助! 【参考方案1】:

您在 Excel 文件中的值看起来像 double 而不是 int,因此,您可能需要考虑将其解析为 instead 的两倍 int 之类的;

double myDoubleWord = double.Parse(words1[t]);
if (myDoubleWord >= 25 && myDoubleWord <= 50) 

使用 &gt;=&lt;= 运算符比较 double 和整数是可行的。

还要注意文化差异,因为您的价值观将. 用作NumberDecimalSeparatordouble.Parse 使用您的CurrentCulture 设置可能适合您的价值观。

【讨论】:

您好 Soner Gonu,感谢您的帮助!现在我可以将它用于 if 语句。当我运行编译器时,我遇到了“未处理的异常输入字符串格式不正确”。所以我使用 try catch 来修复错误。由于第一行不是整数(A1,B1,C1 D1),因此在读取第一行时抛出了FormatException,仅重构了A1,其中B1,C1,D1保持不变。其余的整数没有被过滤,它在抛出 FormatException 后以某种方式停止。我的编码方式正确吗?你能帮我解惑吗..?我已经编辑了上面的代码。 @YPCor 调试时你的words1[t] 的值是多少?你的CurrentCulture到底是什么?在double tline2 = double.Parse(words1[t]); 行中放置一个断点,准确地告诉words1[t] 的值是什么。您也可以在调试时使用 QuickWatch 窗口。 docs.microsoft.com/en-us/visualstudio/debugger/… Gonul 您好,再次感谢您的帮助!断点和 QuickWatch 真的很有用!他们帮助我了解当前执行行中每个变量的输出值是什么。由于ReadToEnd引发FormatException后执行操作停止,整个文本被粘贴为一行一行,导致第一个Text(A1)重建。现在我已经使用 ReadLine 编辑了代码并放置在一个 while 循环中,现在它可以逐行读取文本。至于 CurrentCulture,我不确定我是否正确使用它,但它返回 en-US。【参考方案2】:

这是一个很好的解析数字的解决方案。

if (int.TryParse(words1[t], out int num))  
 
     //we see test if the string is an number and if it is wi output is as a new int.
     if (num >= 25 && num <= 50) //now we can safely do your int comparison without number
     
         fidout.WriteLine(words1[t]);
     

else //if however our string wasn't capable of being an int we do something else
Console.WriteLine("couldn't parse string ");

【讨论】:

您好,感谢您的帮助!我尝试了上述解决方案,现在可以了。

以上是关于运算符'> ='不能应用于'string'和'int'类型的操作数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

运算符'> ='不能应用于'string'和'int'类型的操作数[重复]

运算符==不能应用于java.lang.String char

运算符'=='不能应用于'char'和'string'类型的操作数

二元运算符“==”不能应用于“字符串?”类型的操作数和 Swift 3 中的“布尔”

在swift中连接:二进制运算符'+'不能应用于'String'和'AnyObject'类型的操作数

二元运算符 += 不能应用于类型的操作数 [关闭]