Я пытаюсь использовать метод чтения BinaryReader в общем виде. Только во время выполнения я знаю тип читаемых данных.
public static T ReadData<T>(string fileName)
{
var value = default(T);
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var reader = new BinaryReader(fs))
{
if (typeof (T).GetGenericTypeDefinition() == typeof (Int32))
{
value = (dynamic) reader.ReadInt32();
}
if (typeof (T).GetGenericTypeDefinition() == typeof (string))
{
value = (dynamic) reader.ReadString();
}
// More if statements here for other type of data
}
}
return value ;
}
Как я могу избежать нескольких операторов if?
GetGenericTypeDefinition
? ЕслиT
является универсальным типом, он точно не был создан ни изSystem.Int32
, ни изSystem.String
, потому что это не определения универсального типа. С другой стороны, еслиT
являетсяInt32
илиString
,GetGenericTypeDefinition
выдастInvalidOperationException
, когда вы вызываете его для неуниверсальных типов. - person O. R. Mapper   schedule 30.11.2012if
s устаревшей. - person O. R. Mapper   schedule 30.11.2012