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

namespace ConsoleApplication1
{ 
    class TestIO
    {  
        static void Main()
        {
            string line = "first-main-in-c#";

            var stringQuery = from ch in line where Char.IsDigit(ch) select new string(ch + '-');

            foreach (var c in stringQuery)
                Console.Write(c); 
            Console.WriteLine(System.Environment.NewLine + "Press any key to exit");

            Console.ReadKey();  
        }
    }
}

私は c# の初心者です。私の間違いは何ですか。次の出力を期待していました。

f-i-r-s-t-m-a-i-n-i-n-c

しかし、私は得る:

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Char,<>f__Anonymou
sType0`1[System.Int32]] 
4

3 に答える 3

4

Char.IsDigit は、文字が 10 進数かどうかを判断します。その文字列には 10 進数の文字はありません。数字を含めるかどうかに応じて、Char.IsLetterまたはを使用できます。Char.IsLetterOrDigit

また、存在しない文字列でコンストラクターを呼び出しています。char 配列を取るものを使用できます。

最後に、クエリは一連の文字列を返します。目的の結果(あなたが述べた1つの文字列)を得るには、上記を考慮したコードは次のようになります。

string line = "first-main-in-c#";
var stringQuery = from ch in line where Char.IsLetter(ch) select new string(new char[] {ch, '-'});
string result = String.Join("", stringQuery);

ただし、これには - が含まれますが、最後にトリミングする必要があります。String.Join文字列をセパレーターで結合するため、必要な結果を得るには、これがより簡単になる可能性があります。

string line = "first-main-in-c#";
var result = String.Join("-", from ch in line where Char.IsLetter(ch) select ch.ToString());
于 2012-12-18T21:08:59.640 に答える
3

文字を文字列に変換する最も簡単な方法は、文字に対して を使用ToStringすることです。

string1 文字または文字列のみを受け取るコンストラクターのオーバーロードはありません。

次のいずれかを使用できます。

char c = 'a';

string s = c.ToString();
s = new string(c, 1);
s = new string(new[] { c });
s = c + "";

2 つの文字を一緒に追加するので、既に文字列があるため、そもそも必要はありませんnew string

var stringQuery = from ch in line
                  where Char.IsDigit(ch) 
                  select ch + '-';
于 2012-12-18T21:07:07.137 に答える
0

以下を使用できます。

var stringQuery = from ch in line where Char.IsLetter(ch) select ch + "-";

必要な正確な出力を得るには、最後の「-」を削除する必要があります。

これが役立つことを願っています

于 2012-12-18T21:12:18.230 に答える