Nen*_*vic 2 c# string operators char
今天,按照书中的教程(字面意思),我遇到了一个意想不到的错误:
operator '!=' cannot be applied to operands of type 'char' and 'string'
Run Code Online (Sandbox Code Playgroud)
在这部分代码中:
public void displayFullName()
{
StringBuilder FullName = new StringBuilder();
FullName.Append(firstName);
FullName.Append(" ");
if (middleName[0] != "") //ERROR occurs here
{
FullName.Append(middleName[0]);
FullName.Append(". ");
}
FullName.Append(lastName);
Console.WriteLine(FullName);
}
Run Code Online (Sandbox Code Playgroud)
当然,middleName声明为:
class Person
{
private string firstName;
private string middleName; //obiously declared as string
private string lastName;
private int age;
(...the rest of code...)
Run Code Online (Sandbox Code Playgroud)
那么,问题是你将如何解决这个错误?
Jon*_*eet 10
那么,问题是你将如何解决这个错误?
这取决于你想要达到的目标.让我们来看看有问题的一行:
if (middleName[0] != "")
Run Code Online (Sandbox Code Playgroud)
你真的想在这里确定什么?询问middleName(middleName[0]返回的)的第一个字符是否为空字符串是没有意义的.如果你一直在检查它是否等于"X"(或其他一些单字符串)那么我可能认为你想要的if (middleName.StartsWith(...)).
但是如果你真的只想找出middleName是不是空的,你可以使用:
if (middleName != "")
Run Code Online (Sandbox Code Playgroud)
或者如果middleName也可以为null并且您想要检测到它,您可能需要:
if (!string.IsNullOrEmpty(middleName))
Run Code Online (Sandbox Code Playgroud)
事实上,如果middleName是空的,那么middleName[0]就扔掉了IndexOutOfRangeException.
作为一个副作用 - 除非这是一次性的,它建议你应该找一本不同的书.虽然错误可能会漏掉,但你真的应该能够期望书中的代码能够编译(除非它试图证明失败).您可能需要编辑您的问题点名批评这本书有问题:)(即它使用的方法名称的事实displayFullName和变量名FullName在C#中也有所毁灭性的.)