2012-04-08 16 views
0

我正在从动态更新的json中检索数据。它在某个时间包含一个类型为X的对象,而在其他时间包含一个X类型对象的数组。我需要一个能够在上述任何情况下工作的父类Y.而且对象名称:x保持不变。是否有任何可能的方式使对象和一个对象数组具有相同的名称和相同的类定义?

class Y 
{ 
    public X x { get; set; } 
    public X[] x { get; set; } 
} 
class X 
{ 
    public int a { get; set; } 
} 

这显示了一个错误:Y型已经包含了X
的定义是否有任何可能的方式来做到这一点?

+1

这是什么意思? obj.x会解决什么问题? – 2012-04-08 16:19:16

回答

0

您得到错误的原因是C#不允许具有相同名称的两种类型的变量。

你不能声明

SomeMethod() 
{ 
    int x = 0; 
    string x = "something"; 
} 

如果我是你,我可能会做以下。

class Y 
{ 
    public List<X> listOfX{get; set;} 
} 
class X 
{ 
    public int a { get; set; } 
} 

您可以有一个列表。如果只有一个元素,则有一个大小为1的元素列表。

0

C#规范说明一个类型的成员必须有一个唯一的名称(我认为这是为了防止模糊的成员引用)。见http://msdn.microsoft.com/en-us/library/aa691137(v=vs.71).aspx,具体有:

Because every member of a namespace or type must have a unique name, it follows that the fully qualified name of a namespace or type is always unique.

0

您可以使用动态关键字,如果需要名为x在同一时间返回X类型的单值的属性,并在另一个X的数组。

class Y 
{ 
    public dynamic x { get { return IfMonday() ? new X() : new X[100]; set; } 
} 
+0

谢谢,但它没有帮助我。 有没有什么办法在C#中检查变量是一个对象还是数组?所以,我可以使用它来代替IfMonday().... 有点像php的bool is_array()? – anurag 2012-04-11 16:43:35

+0

你的意思是bool b =(x是T []); ? – cdiggins 2012-04-12 11:21:27

相关问题