将字符串转换为小写并仅允许字母的简单程序不起作用

Simple program to convert string to lower case and allow only letters don't work

你们能告诉我为什么这个程序不将我的输入字符串更改为仅包含字母的小写字符串吗?我的意思是只有字母部分有效,但字母不会变为小写。当我写 YELLOW 时,我应该在 window 中看到黄色,但我仍然将 YELLOW 全部大写作为输出。

namespace ConsoleApplication6
{
class czlowiek
{
    private string _imie;
    private string _nazwisko;
    private int _wiek;

    public string imie
    {
        get
        {
            return _imie;
        }
        set
        {
            for (int i = 0; i < value.Length; i++)
            {
                if (Convert.ToInt32(char.ToLower(value[i])) >= 97 &&     Convert.ToInt32(char.ToLower(value[i])) <= 122)
                    _imie += value[i];
            }
        }

    }

    public string nazwisko
    {
        get
        {
            return _nazwisko;
        }
        set
        {
            for (int i = 0; i < value.Length; i++)
            {
                if (Convert.ToInt32(char.ToLower(value[i])) >= 97 && Convert.ToInt32(char.ToLower(value[i])) <= 122)
                    _nazwisko += value[i];
            }

        }

    }
    public int wiek
    {
        get
        {
            if (_wiek < 0 || _wiek > 100)
                return 0;
            else
                return _wiek;
        }
        set
        {
            if (value < 0 || value > 100)
                Console.WriteLine("Wporwadzona wartość niepoprawna");
            else
                    _wiek = value;
        }
    }

}
}

和主程序:

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

namespace ConsoleApplication6
{
class Program
{
    static void Main(string[] args)
    {
        czlowiek admin = new czlowiek();

        Console.Write("Podaj swoje imie: ");
        admin.imie = Console.ReadLine();
        Console.WriteLine("Cześć {0}!", admin.imie);

        Console.WriteLine("Podaj swój wiek: ");
        admin.wiek = int.Parse(Console.ReadLine());
        if (admin.wiek != 0)
             Console.Write("Masz {0}", admin.wiek);


        Console.ReadLine();

    }
}
}

您应该像这样设置值:

_imie += char.ToLower(value[i]);
_nazwisko += char.ToLower(value[i]);

好的,如果我没理解错的话。您想要 "convert" 字符串小写并删除任何非字母字符 ( "a-z" ) ?

如果是这样,那么您可以使用这段代码:

public string imie
{
    get { ... }
    set {
        _imie = new string(value.Where(c => char.ToLower(c) >= 'a' && char.ToLower(c) <= 'z').Select(c => char.ToLower(c)).ToArray());
    }
} 

这将删除所有非字母字符,然后全部转换为小写并创建 string

Check how it works

除非你真的需要一个字符一个字符地处理 imie 的输入值,那么你的 setter 可能是:

set
{
    _imie = new string(value.Where(char.IsLetter).Select(char.ToLower).ToArray());
}

此外,

admin.wiek = int.Parse(Console.ReadLine());

应该是re-written到:

int numberValue;
admin.wiek = int.TryParse(Console.ReadLine(), out numberValue) ? numberValue : 0;

避免空字符串或包含 non-numeric 个字符的字符串解析问题。

试试这个片段:

 string value = "HellO1234";
        IEnumerable<char> letters = value.Where(ch => char.IsLetter(ch));
        string letersString;
        string smallLetters;
        if(letters.Any())
        {
            letersString = new string( letters.ToArray());
            smallLetters = letersString.ToLower();
        }