вы можете написать цикл и увеличить счетчик внутри этого цикла:
int numberOfLetters = 0;
foreach (var c in str)
{
numberOfLetters++;
}
// at this stage numberOfLetters will contain the number of letters
// that the string contains
есть и другой способ:
int numberOfLetters = str.ToCharArray().Length;
есть и другой, еще более безумный способ использования функции SysStringByteLen , которая работает на BSTR . Строки в .NET размещаются в памяти с помощью 4-байтового целого числа, содержащего длину строки, за которым следует столько 2-байтовых символов UTF-16, представляющих каждый символ. Это похоже на то, как BSTR хранятся . Итак:
class Program
{
[DllImport("oleaut32.dll")]
static extern uint SysStringByteLen(IntPtr bstr);
static void Main()
{
string str = "wordcounter";
var bstr = Marshal.StringToBSTR(str);
// divide by 2 because the SysStringByteLen function returns
// number of bytes and each character takes 2 bytes (UTF-16)
var numberOfLetters = SysStringByteLen(bstr) / 2;
Console.WriteLine(numberOfLetters);
}
}
Очевидно, что делать что-то подобное вместо использования встроенной функции Length
никогда не следует в каком-либо реальном рабочем коде, и код, показанный здесь, не следует воспринимать всерьез.