Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型转换错误_C# - Fatal编程技术网

C# 类型转换错误

C# 类型转换错误,c#,C#,首先我想说对不起,因为对你们来说这是一个非常简单的问题,因为我是初学者,我正在尝试编写一个程序,以获取字符串中的输入并在新字符串中反转它,这样我就可以比较两个字符串是否相同,而不是回文 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Assg2_ques

首先我想说对不起,因为对你们来说这是一个非常简单的问题,因为我是初学者,我正在尝试编写一个程序,以获取字符串中的输入并在新字符串中反转它,这样我就可以比较两个字符串是否相同,而不是回文

using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Assg2_question1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string word, reverse ="";
                Console.WriteLine("type any word to check if it palindrome or not");
                word =  Console.ReadLine();
                int lengthOfWord, i;
                lengthOfWord = word.Length;
                for(i=lengthOfWord ; i>=1 ; i-- )
                {
                    reverse = word[lengthOfWord];
                }
            }
        }
    }

我有两个字符串word和reverse,当我尝试反转字符串时,它在reverse=word[lengthOfWord]上显示错误无法隐式地将类型char转换为字符串,这是为什么?因为我在程序中从不使用char

您的变量字是一个
字符串
。而
字符串
字符
数组。因为它是一个数组,所以您可以通过[index]访问它,这就是您正在做的。因此,当您使用
word[lengthOfWord]
时,您将得到一个
Char
。而
字符
不能隐式转换为
字符串


但是当你想保留一个
字符串时,你的逻辑根本就不正确。

你的变量字是一个
字符串。而
字符串
字符
数组。因为它是一个数组,所以您可以通过[index]访问它,这就是您正在做的。因此,当您使用
word[lengthOfWord]
时,您将得到一个
Char
。而
字符
不能隐式转换为
字符串

但是当你想保留一个
字符串时,你的逻辑根本就不正确。

你需要一个字符串。你的数组边界检查也搞砸了。数组索引从
0
开始,
word.Length-1
是最后一个索引:

string word , reverse = "";
Console.WriteLine("type any word to check if it palindrome or not");
word = Console.ReadLine();
int lengthOfWord, j;
StringBuilder sb = new StringBuilder();
lengthOfWord = word.Length - 1;
for (j = lengthOfWord; j >= 0; j--)
{
    sb.Append(word[j]);
}
reverse = sb.ToString();
出现错误是因为
word[j]
是字符而不是字符串。字符串也是不可变的,最好使用StringBuilder。

您需要一个字符串。你的数组边界检查也搞砸了。数组索引从
0
开始,
word.Length-1
是最后一个索引:

string word , reverse = "";
Console.WriteLine("type any word to check if it palindrome or not");
word = Console.ReadLine();
int lengthOfWord, j;
StringBuilder sb = new StringBuilder();
lengthOfWord = word.Length - 1;
for (j = lengthOfWord; j >= 0; j--)
{
    sb.Append(word[j]);
}
reverse = sb.ToString();
出现错误是因为
word[j]
是字符而不是字符串。字符串也是不可变的,最好使用StringBuilder。

使用字符串生成器:

    static void Main(string[] args)
    {
        string word = string.Empty; 
        string reverse = string.Empty;
        Console.WriteLine("type any word to check if it palindrome or not");
        word = Console.ReadLine();
        var sb = new StringBuilder();
        for (var i = word.Length - 1; i >= 0; i--)
        {
            var ch = word[i];
            sb.Append(word[i]);
        }
        reverse = sb.ToString();
        Console.WriteLine(word);
        Console.WriteLine(reverse);
        Console.ReadKey();
    }
使用字符串生成器:

    static void Main(string[] args)
    {
        string word = string.Empty; 
        string reverse = string.Empty;
        Console.WriteLine("type any word to check if it palindrome or not");
        word = Console.ReadLine();
        var sb = new StringBuilder();
        for (var i = word.Length - 1; i >= 0; i--)
        {
            var ch = word[i];
            sb.Append(word[i]);
        }
        reverse = sb.ToString();
        Console.WriteLine(word);
        Console.WriteLine(reverse);
        Console.ReadKey();
    }

还可以使用LINQ反转字符串:

如果for循环是您的事情,那么这将起作用:

var reverse = "";
for (int i = word.Length - 1; i >= 0; i--)
{
    reverse += word[i];
}
请注意代码之间的差异:
reverse=word[lengthOfWord]
reverse+=word[i]

前者每次分配最后一个字符,而后者将每个单独的字符添加到字符串中

但在这种情况下,使用stringbuilder更有效:

var sb = new System.Text.StringBuilder();
for (int i = word.Length - 1; i >= 0; i--)
{
    sb.Append(word[i]);
}
var reverse = sb.ToString();
这是因为String是一个不可变的对象。因此,每当字符串的内容被修改时,它实际上会在内存中分配一个新字符串。做了很多工作后,效率不是很高,比如在循环中。

但通过使用StringBuilder,对象的内容可以更改,而无需每次迭代分配新内存。

您也可以使用LINQ反转字符串:

如果for循环是您的事情,那么这将起作用:

var reverse = "";
for (int i = word.Length - 1; i >= 0; i--)
{
    reverse += word[i];
}
请注意代码之间的差异:
reverse=word[lengthOfWord]
reverse+=word[i]

前者每次分配最后一个字符,而后者将每个单独的字符添加到字符串中

但在这种情况下,使用stringbuilder更有效:

var sb = new System.Text.StringBuilder();
for (int i = word.Length - 1; i >= 0; i--)
{
    sb.Append(word[i]);
}
var reverse = sb.ToString();
这是因为String是一个不可变的对象。因此,每当字符串的内容被修改时,它实际上会在内存中分配一个新字符串。做了很多工作后,效率不是很高,比如在循环中。

但是通过使用StringBuilder,对象的内容可以更改,而无需在每次迭代中分配新内存。

reverse
是一个字符串变量,而
word[lengthOfword]
在单词字符串的特定索引处返回一个字符。所以在这里,从字符到字符串的转换是不可能的。这就是错误所在。您使用char。您的单词[lengthOfWord]返回单个字符,该字符是字符。为了看得更清楚,你可以做
char-letter=word[lengthOfWord];reverse=letter.ToString()
字符串word=string.Empty的可能重复项;string reverse=string.Empty;Console.WriteLine(“键入任何单词以检查其是否为回文”);word=Console.ReadLine();var sb=新的StringBuilder();for(vari=word.Length-1;i>=0;i--){varch=word[i];sb.Append(word[i]);}reverse=sb.ToString();控制台写入线(word);控制台写入线(反向);Console.ReadKey();}
reverse
是一个字符串变量,而
word[lengthofward]
在单词字符串的特定索引处返回一个字符。所以在这里,从字符到字符串的转换是不可能的。这就是错误所在。您使用char。您的单词[lengthOfWord]返回单个字符,该字符是字符。为了看得更清楚,你可以做
char-letter=word[lengthOfWord];reverse=letter.ToString()
字符串word=string.Empty的可能重复项;string reverse=string.Empty;Console.WriteLine(“键入任何单词以检查其是否为回文”);word=Console.ReadLine();var sb=新的StringBuilder();for(vari=word.Length-1;i>=0;i--){varch=word[i];sb.Append(word[i]);}reverse=sb.ToString();控制台写入线(word);控制台写入线(反向);Console.ReadKey();}反向=反向+单词[长单词];我在一次试运行后编辑了这个字符,以保留上一个字符,但现在它显示错误索引超出了数组的边界。“因此,当您使用
word[lengthofward]
”如果不这样做,将导致一个越界异常。也许值得指出的是OP没有使用正确的索引
i
@MongZhu,这就是我写最后一句话的原因。但我想他应该知道为什么他的代码不符合t