【发布时间】:2014-12-26 18:47:51
【问题描述】:
我有一个结构定义了一些使用泛型的对类型:
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# 中实现我的目标?
【问题讨论】:
-
请重新检查您的代码。您是缺少括号还是只有我一个人?
-
在您的实际项目中,您是否使用与示例中相同的类型?我只是在考虑一个通用的基类。如果您使用具有共同祖先的类,则可以将其用于此类通用集合。否则我会使用
object。 -
@DmitryPopov 不,上面的类型只是为了示例。我需要这样做的原因是在某些情况下类型在编译时是未知的。
-
@geraldCelente 泛型更像是编译时。见stackoverflow.com/questions/12708090/…
-
“我将其项目的数组属性值提交为 T 类型”——这甚至没有意义。没有“T型”。那只是一个占位符。你想使用你的类型的方式,它甚至不应该是通用的;只需输入
Value的类型object。如果您要展示一个合理的代码示例,说明为什么您认为将所有这些不相关的对象放入同一个数组中是有意义的,那么也许可以提供一个有用的答案。否则,只是不清楚您要做什么。
标签: c# arrays generics collections