2011-12-11 1 views

答えて

8

TResultobjectstringのいずれかでなければできないおそらく仕事をキャスト。あなたが実際にが実体のようなものを作成しようとしてだと仮定すると、私はいずれかはあなたがLINQを使用して(できれ)Func<string, TResult>かに渡すことをお勧め - あなたはすべてで、この方法は必要ありません。

var list = File.ReadLines(location) 
       .Select(line => new SomeEntity(line)) 
       .ToList(); 

それでもメソッドをしたい場合は、あなたがでし使用:

public static List<TResult> LoadFromFile<TResult>(string location, 
                Func<string, TResult> selector) 
{ 
    return File.ReadLines(location).Select(selector).ToList(); 
} 

...しかし、私はそれはそれだけの価値だかどうかはわかりません。あなたはこれをたくさんやっている場合、私はあなたのファイルハンドルがあっても閉じられますように、あなたがusingステートメントを使用する必要があり、あなたは、ファイルから読み込むための必要性を行うとき、サイドノートでは(...

を想定します例外がスローされます)。

+0

SomeEntityとは何ですか?Func を使用するにはどうすればいいですか? –

+0

@ahmadalishafiee:あなたが作成したいタイプ、つまりあなたが* TResultとして渡すタイプでしょう。私はおそらくあなたはおそらく一般的な方法を必要としないことを示唆しています。編集します。 –

+0

私のプロジェクトのアシスタントクラスを書いてみたいと思います。何度もデータをロードしたいと思っていましたが、いくつかの異なるタイプがありました。データをロードして必要なデータ型に戻す汎用メソッドを作りたいと思います。ジェネリックメソッドなしでこれを行いますか? –

-1

"TResult"に明示的な型変換演算子を実装することで、これを実現できます。 オブジェクトからTResultへの明示的なキャスト。

MSDN Reference

これは実際には「方法で」(いくつかの仮定を伴う)指定されたオブジェクトからのコンストラクタを作成することができる「TResult」のコンストラクタを有すると同じです。

+0

明示的変換演算子は、いくつかの基本クラスに制約のないジェネリックではサポートされておらず、結果はそのベースクラスのみになります。さらに、メソッドを呼び出すインスタンスを持っていないので、ここではインタフェースはそれほど良くありません。 –

+0

インターフェイスの使用状況に関する回答を編集しました。ジェネリックが明示的な変換をサポートしていないことは知らなかった。間違っていれば、学習の助けとなります。ありがとう。 –

関連する問題