我正在尝试创建一个List<T>
,用户通过在UI上的ComboBox
中选择数据类型来指定数据类型。我设法创建了CustomEntity
的对象,其中包含List<T>
,但是一旦我从Button1_Click
事件处理程序退出,CustomEntity
将超出范围。是否可以创建一个类级变量?我试过但不得不将其评论出来,因为它导致了错误。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CustomClassWithGenericList
{
public partial class Form1 : Form
{
//The following error is created: Cannot implicitly convert type
//CustomClassWithGenericList.CustomEntity<decimal> to
//CustomClassWithGenericList.CustomEntity<object>
//private CustomEntity<object> input1;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (cb1.SelectedItem.ToString().ToUpper() == "DECIMAL")
{
input1 = new CustomEntity<decimal>();
string[] temp = textBox1.Text.Split(',');
foreach (string s in temp)
{
decimal number;
if (decimal.TryParse(s, out number))
{
input1.inputValue.Add(number);
}
else
{
MessageBox.Show("Error occured.");
}
}
}
else if(cb1.SelectedItem.ToString().ToUpper() == "INT")
{
}
else if(cb1.SelectedItem.ToString().ToUpper() == "TIMESPAN")
{
}
}
}
public class CustomEntity<T>
{
public List<T> inputValue;
public CustomEntity()
{
inputValue = new List<T>();
}
}
}
答案 0 :(得分:1)
注释掉的行使用类型T,它不是定义的类型。并不是说你需要在decleration点指定泛型的类型参数列表,而不是其他任何地方。
如果希望泛型能够保存任何对象,则应该简单地将类型“object”作为类型参数传递给它。
如果它只能有几种不同的类型,那么每种类型创建一个成员变量可能是首选选项,具体取决于您以后计划如何使用它。
答案 1 :(得分:1)
那里可以使用很多技术。首先,您可以创建Object
或dynamic类型变量,只需将其投射即可。
此外,您可以将数据存储在内存中的某些状态(如某些会话或应用程序状态,或缓存,类似的东西),在这种情况下,只需从此源中获取数据。