运算符'> ='不能应用于'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" >= 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)
使用 >=
和 <=
运算符比较 double 和整数是可行的。
还要注意文化差异,因为您的价值观将.
用作NumberDecimalSeparator
,double.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 中的“布尔”