以下のようなデータがあるときに、
List<DataA> DataAList;
List<DataB> DataBList;
List<DataC> DataCList;
以下のようなメソッドを実装しました
IEnumerable<object> GetCurrentDataList()
{
switch(DataType) // DataTypeはenum型
{
case DataType.A: return DataAList.Select(x => (object)x);
case DataType.B: return DataBList.Select(x => (object)x);
case DataType.C: return DataCList.Select(x => (object)x);
}
return null;
}
戻り値の型と正確に一致させるために、Select(x => (object)x)を実行する
ようにしていたのですが、昨日、ふと以下のコードでも、
コンパイルwarningすら表示されずに正常動作している(ように見える)こと
に気づきました。
IEnumerable<object> GetCurrentDataList()
{
switch(DataType) // DataTypeはenum型
{
case DataType.A: return DataAList;
case DataType.B: return DataBList;
case DataType.C: return DataCList;
}
return null;
}
List → IEnumerable への自動キャスト と
DataA/DataB/DataC → object への自動キャストが同時に働いているもの
と推測されますが、これって安全なコードと言えるんでしょうか?