我有一个结构定义了一些使用泛型的对类型:
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#中实现我的目标?
答案 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>) ...