首页 > 解决方案 > c# 不能从字符串转换为字符

问题描述

我正在尝试编写一些代码来显示用户给你的密码中存在的任何符号。我很新,正在尝试使用isSymbol,但我被卡住了。它说不能从字符串转换为字符

using System;

namespace booleanprok
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter a made up password:");
            string madeUppw = Console.ReadLine();
            Console.WriteLine(char.IsSymbol(madeUppw));


        }
    }
}

标签: c#

解决方案


“我正在尝试编写一些代码来显示用户给你的密码中存在的任何符号。”

鉴于上述陈述,我看到给出的示例代码存在以下问题:

  1. 您将 a 传递string给该IsSymbol()方法,该方法需要char.
  2. 您正在从IsSymbol()方法(即 a bool)而不是字符本身输出返回值。
  3. IsSymbol()不会返回我们通常认为是密码中的符号的所有字符(如!@#等)。来自文档“符号是 UnicodeCategory 中以下类别的成员:、、、MathSymbol和。”CurrencySymbolModifierSymbolOtherSymbol

解决这些问题的一种方法是将任何不是字母或数字的字符视为“符号”,我们可以通过使用 Linq 扩展方法Where()char.IsLetter()andchar.IsDigit()方法来做到这一点。然后我们可以使用结果将字符输出到控制台string.Join

例如:

Console.Write("Enter a made up password: ");
string madeUpPwd = Console.ReadLine();

// Get the distinct characters that aren't Letters or Digits
IEnumerable<char> symbols = madeUpPwd
    .Where(c => !char.IsLetter(c) && !char.IsDigit(c))
    .Distinct();

// Output them to the console (separated by commas and wrapped in single quotes)
Console.WriteLine($"You entered the symbols: '{string.Join("', '", symbols)}'");

样本输出

在此处输入图像描述

(请注意,使用.Where(char.IsSymbol)只会返回'$'字符)


推荐阅读