小编jon*_*yer的帖子

无法使用动态C#转换通用基元

我试图检查我在返回类型中向下转换的结果是否可转换为哪种派生类型.我正在检查的派生类型是具有协变参数的泛型.我使用is运算符将其强制转换为动态类型.我相信,因为泛型参数是一个原始类型的bool,它不起作用.奇怪的是在监视窗口中,结果是预期的,但代码执行不是.我不确定是否有遗漏或这是一个错误.这是预期的行为吗?

我通过检查结果是否是泛型,然后获取类型参数并使用MakeGenericType和'dynamic result = Convert.ChangeType'来解决这个问题.

这是一个简单的示例应用程序来演示.

var testBool = new List<bool>();     // Primitive
var testString = new List<string>(); // Class

if (testBool is IEnumerable<bool>)
    Console.WriteLine("Test Bool");
if (testBool is IEnumerable<dynamic>)
    Console.WriteLine("Test Bool - Dynamic");
if (testString is IEnumerable<string>)
    Console.WriteLine("Test string");
if (testString is IEnumerable<dynamic>)
    Console.WriteLine("Test string - Dynamic");
Run Code Online (Sandbox Code Playgroud)

注意:.NET Core 2.1,Visual Studio 2017,C#

样品申请

c#

2
推荐指数
1
解决办法
129
查看次数

标签 统计

c# ×1