为什么使用“为”铸造对象为null,与C#动态
问题描述:
例如操作结果铸造,为什么使用“为”铸造对象为null,与C#动态
比方说group.SupportedProducts为[“测试”,“你好”,“世界”]
var products = (string[]) group.SupportedProducts;
结果正确地是一个字符串数组,它包含上述3个要素中的“产品” - “测试”,“你好”和“世界”
然而,
var products= group.SupportedProducts as string[];
结果产品为空。
答
想必group.SupportedProducts
不实际上一个string[]
,但它的东西,它支持自定义转换string[]
。
as
从来没有调用自定义转换,而铸造。
样品展示这一点:
using System;
class Foo
{
private readonly string name;
public Foo(string name)
{
this.name = name;
}
public static explicit operator string(Foo input)
{
return input.name;
}
}
class Test
{
static void Main()
{
dynamic foo = new Foo("name");
Console.WriteLine("Casting: {0}", (string) foo);
Console.WriteLine("As: {0}", foo as string);
}
}
+0
哇。头脑风暴。我将所有用户定义的转换都放在了一起,因为OP说这是'动态'。我认为UDC从未被考虑过,除非在编译时(即不在通用设置中) – sehe 2013-02-15 23:25:59
有趣的问题 – sehe 2013-02-15 23:16:21
@zerkms这意味着你不同意第一条语句“作品”(我恨那个动词题) – 2013-02-15 23:16:51
@Shmiddty数组是不是基本类型吧? – 2013-02-15 23:18:08