코드를 작성하면 CS0266이 생성됩니다.명시 적 형 변환이 존재하지만 Dictionary <int, string []>에 대해 IDictionary <int, IEnumerable <string>>
Dictionary<Int32, string[]> d1 = new Dictionary<int, string[]>();
IDictionary<int, IEnumerable<string>> ide1 = d1; // CS0266
명시 적 형변환이 있다는 힌트는 명시 적 형변환이 문제를 해결할 것을 제안합니다.
IDictionary<int, IEnumerable<string>> ide1 = (IDictionary<int, IEnumerable<string>>)d1; // No error, but throws an exception
이 캐스트를 만드는 방법이 있습니까? string[][]
및 IEnumerable<IEnumerable<string>>
에서 작동합니까?
namespace Quickie
{
class QuickieArray
{
private static void TestCastDictionaryWithArrayValue()
{
Console.WriteLine();
Console.WriteLine("===TestCastDictionaryWithArrayValue===");
Dictionary<Int32, string[]> d1 = new Dictionary<int, string[]>();
d1[1] = new string[]{"foo"};
IDictionary<int, string[]> id1 = d1;
Console.WriteLine("id1 is null: {0}", id1 == null);
IDictionary<int, IEnumerable<string>> ide1 = id1 as IDictionary<int, IEnumerable<string>>;
IDictionary<int, IEnumerator<string>> iden1 = id1 as IDictionary<int, IEnumerator<string>>;
Console.WriteLine("ide1 is null: {0}", ide1 == null);
Console.WriteLine("iden1 is null: {0}", iden1 == null);
Console.WriteLine();
}
internal static void Test()
{
Console.WriteLine();
Console.WriteLine("=QuickieArray=");
TestCastDictionaryWithArrayValue();
}
}
}
출력 :
=== TestCastDictionaryWithArrayValue ===
ID1가 null : 거짓
IDE1가 null : 참
iden1가 null : 참
주의 :'System.Int32'와'int'는 같은 타입입니다; C#에서는 후자가 전자의 별칭입니다. (물론'id1'는 'null'이 아닙니다.) – dlev
명시 적 캐스트의 적법성에 대한 좀 더 자세한 정보는 다른 질문에 대한 최근 답변을 참조하십시오. http://stackoverflow.com/a/8402861/55943 – mquander