2011-10-19 5 views
0

私は、ファイルにbinaryserializedされるリストを持っていますが、私は以下のコンパイルエラー取得ファイルデシリアライズしようとしたときに:私はキャスト

をもジェネリックをキャストに精通particulary異なるクラス間。

メソッド 'UtilitiesLibrary.BinSerialization.BinaryFileDeserialize(string)'の型引数は、その用途から推論できません。型引数を明示的に指定してみてください。

コード

//Class myManager 
public void DeserializeAnimals(string filePath) 
{ 
    m_animalList = (List<Animal>) BinSerialization.BinaryFileDeserialize(filePath); 
} 


//Class BinSerializer 
public static T BinaryFileDeserialize<T>(string filename) 
{ 
    T objectSerialize; 
    Stream stream = null; 

try 
{ 
    stream = File.Open(filename, FileMode.Open); 
    BinaryFormatter bFormatter = new BinaryFormatter(); 
    objectSerialize = (T)bFormatter.Deserialize(stream); 
} 
catch (FileNotFoundException) { objectSerialize = default(T); } 
finally 
{ 
if (stream != null) 
    stream.Close(); 
} 

    return objectSerialize; 
} 

答えて

2

あなたが必要とするように見えます:

m_animalList = BinSerialization.BinaryFileDeserialize<List<Animal>>(filePath); 

ジェネリック引数からではなく、の戻り値から推測することができます。

void Serialize<T>(string filePath, T value) 

がここにいるので(コンパイラによって知られている)m_animalListのタイプはTを解決するのに役立ちます

Serialize(path, m_animalList); 

として呼び出すことができます。同様の方法理由です。上記の行がに(この場合)と100%同一である:

Serialize<List<Animal>>(path, m_animalList); 

私はまた、しかし、BinaryFormatterは道あなたをかむかもしれないと警告します - それは非常バージョントレラントではありません。

+0

おかげで、それが働きました。 – user601496

+0

@ user601496お願いしますが、最終行の警告に注意してください; p –

0

私はエラーがこの林であり、それがあるべきだと思う:

public void DeserializeAnimals(string filePath) 
{ 
    m_animalList = BinSerialization.BinaryFileDeserialize<List<Animal>>(filePath); 
}