2016-11-07 9 views
0

文字列をカンマで区切り、最初にint配列に変換しなければなりませんでした。キャスト<int>のC#でのメソッドは型キャストではありません

と、次の行が

int[] array = input.Split(',').Select(obj=>Convert.ToInt32(obj)).ToArray(); 

正常に動作しているが、私は、キャスト拡張メソッドを使用して、異なる方法でこれをやってみたかったです。

int[] array = input.Split(',').Cast<int>().ToArray(); 

ただし、キャスト拡張を使用すると、無効なキャスト演算例外がスローされます。

実際には必要ではないがまだ動作していないキャストの前にType()を適用しました。

int[] array = input.Split(',').OfType<string>().Cast<int>().ToArray(); 

私はここで間違いを犯しています。

私は適切な方法でキャスト方法を使用しています。

+0

@peter動作するように 'キャスト()'メソッドについて –

+0

最初の私の質問を読んでください、オブジェクトがすでに正しい型でなければなりません。 'キャスト()'メソッドはデータの再解釈のみを行い、変換は一切行いません。文字列を 'int'として構文解析するためのC#の正しいテクニックについては、マークされた複製を参照してください。 –

+0

@PeterDunihoなので、キャストは入力されないので、キャストは –

答えて

1

stringintに変換する場合は、int.Parseを使用する必要があります。 C#では、文字列はであり、は整数に直接キャストできません。

input.Split(',').Select(int.Parse).ToArray() 
+0

私はもちろん、間違ってキャストメソッドですが、私はすでに動作しているクエリを持っています。なぜキャストメソッドを使用できないのですか –

0

次の方法を使用することもできます。

int[] array = Array.ConvertAll(input.Split(','), int.Parse); 
+0

もちろん、キャストメソッドで何が問題なのですか? –

+0

@ YogeshJoshiキャストはあなたのケースでは動作しません。 'Cast 'は 'IEnumerable'インターフェースの拡張メソッドで、文字列配列の型は' IEnumerable 'です。たとえば、 'AsEnumerable'メソッドを使用して配列を列挙可能にキャストした場合、配列の型は' System.Collections.Generic.IEnumerable 'になります – Shell

関連する問題