c#与不同类型的每个数组项的数组泛型

时间:2014-12-26 18:47:51

标签: c# arrays generics collections

我有一个结构定义了一些使用泛型的对类型:

struct SomeNameValuePair<T>
{
    string TypeName;
    T Value;
}

需要声明SomeNameValuePair的数组:

SomeNameValuePair<T>[] someNameValuePair=new SomeNameValuePair<T>[3];

问题是我需要为不同数组项的Value属性使用不同类型。 在代码中,它更容易理解:

SomeNameValuePair<int> tempSomeNameValuePair0;

tempSomeNameValuePair0.TypeName="int";
tempSomeNameValuePair0.Value=10;


SomeNameValuePair<double> tempSomeNameValuePair1;

tempSomeNameValuePair1.TypeName="double";
tempSomeNameValuePair1.Value=10.5;

tempSomeNameValuePair2.TypeName="string";
tempSomeNameValuePair2.Value="Random String";

someNameValuePair[0]=tempSomeNameValuePair0
someNameValuePair[1]=tempSomeNameValuePair1
someNameValuePair[2]=tempSomeNameValuePair2

很可能我的代码在实例化数组someNameValuePair=new SomeNameValuePair<T>[3];时不起作用,我将其项目的数组属性Value提交为T类型。

有没有办法在C#中实现我的目标?

1 个答案:

答案 0 :(得分:0)

您需要一个非通用基类:

class SomeNameValuePairBase
{
    string TypeName;
}

然后所有通用项继承自此基类: (它的类,不是struct,因为结构不能使用继承)

class SomeNameValuePair<T> : SomeNameValuePairBase
{
    T Value;
}

这可以让你宣布你的物品数组:

SomeNameValuePairBase[] someNameValuePair = new SomeNameValuePairBase[3];

并像这样使用它:

someNameValuePair[0] = new SomeNewValuePair<double>();

此外,您不应使用'TypeName',而是使用C#'is'运算符:

if(someValuePair[0] is someValuePair<double>) ...