2017-04-12 8 views
1

Plsはこのコードを説明します.Oftype()。私は2週間GGを検索しましたが、少しの結果があります。だから、私は完全に理解できません。 マイコード:C#_Regex_.Oftype <match>()

String source = "Car2Bike6Ship6Bike3Car64Ship56" 
var result = Regex 
.Matches(source, "(?<name>[A-Z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+)(?<size>[0-9]+)") 
.OfType<Match>() 
.Select(match => new 
{ 
    name = match.Groups["name"].Value, 
    size = int.Parse(match.Groups["size"].Value), 
}) 

.GroupBy(value => value.name) 
.Select(chunk => String.Format("{0}: {1}", 
    chunk.Key, String.Join(" + ", chunk.Select(item => item.size)))); 
     String report = String.Join(Environment.NewLine, result); 

     report = report.Replace(": 0", ":"); 
     report = report.Replace(": +", ":"); 
     Console.Write(report); 
     Console.ReadLine(); 

答えて

2

OfType<T>IEnumerable<T>にそれを作る非ジェネリックIEnumerableの拡張方法、です。コードサンプルで使用される理由は、match.GroupsSelectの中に呼び出すことです。

Matches方法はIEnumerableを実装する、MatchCollectionを返すので、ないIEnumerable<Match> LINQ式が列挙されているコレクションの実際の型から型情報を利用従うLINQ文をできるようにCast<T>またはOfType<T>のいずれかを使用する必要があります。

+0

ご支援ありがとうございます。私は今すぐそれを試みます。 –