我有一个函数,它根据传递给该函数的参数返回不同类型的对象。 是否可以根据C#4.0中的某些标识符将这些不同的对象类型添加到集合中? 通常我们会这样做 列表或列表 但我想要一个可以添加任何类型对象的集合。
答案 0 :(得分:10)
您可能希望定义一个接口,例如List<object>
,其中包含您的对象需要实现的一些方法,而不仅仅像其他海报一样制作IListableObject
。这将使使用这些对象的任何代码更容易编写,并防止不需要的对象进入集合中。
答案 1 :(得分:7)
是的,它被称为object
。例如:
var objlist = new List<object>();
objlist.Add(1);
objlist.Add(true);
objlist.Add("hello");
答案 2 :(得分:4)
您可以使用object[]
,List<object>
,ArrayList,IEnumerable,...但如果这些类型具有共同的基本类型,那么最好坚持使用强类型集合。
答案 3 :(得分:3)
真的,你的收藏应该尽可能具体。当你说
不同类型的对象
这些物体有什么共同之处吗?他们是否实现了通用界面?
如果是这样,您可以专门化该界面上的列表List<IMyInterface>
否则List<object>
会做你想做的事。
<强>更新强>
不,不是真的。
我很抱歉,但我会质疑你的设计 如果您有一组不同的对象,您如何决定如何使用其中一个对象? 您将有一个大的switch语句切换对象的类型,然后您转换为特定的对象并使用它。
您的工厂方法中也有一个类似的switch语句,用于创建对象。
面向对象的一个好处是,如果你正确地设计你的对象,那么你就不需要做这些大的“如果这个对象做这个.Method(),如果它是那个对象那么做.OtherMethod() ”
我可以问,为什么要将不同的对象放入同一个集合中?对你有什么好处?
答案 4 :(得分:1)
如果您想要一个可以添加任何类型对象的集合,那么List<object>
是最合适的类型。
答案 5 :(得分:1)
早期版本的C#(非泛型)中的集合可以包含任何类型的对象。如果它们是值类型,它们将被装入对象中。 当您需要使用它们时,您可以将它转换为原始类型。
您可以使用List<Type>
来保存类型信息,如果这是您想要的。而Type [],Hashtable等也没关系。您可以使用typeof运算符来获取类型或使用Object.GetType()。
答案 6 :(得分:1)
答案 7 :(得分:0)
我的建议:
public class ParamValue
{
object value = null;
public ParamValue(object val)
{
value = val;
}
public string AsString()
{
return value.ToString();
}
public int AsInt()
{
return int.Parse(value.ToString());
}
public int? AsNullableInt()
{
int n;
if (int.TryParse(value.ToString(), out n))
{
return n;
}
return null;
}
public bool AsBool()
{
return bool.Parse(value.ToString());
}
public bool? AsNullableBool()
{
bool b;
if (bool.TryParse(value.ToString(), out b))
{
return b;
}
return null;
}
}
public class Params
{
Dictionary<string, object> paramCol = new Dictionary<string, object>();
public void Add(string paramName, object value)
{
paramCol.Add(paramName, value);
}
public ParamValue this[string paramName]
{
get
{
object v;
if (paramCol.TryGetValue(paramName, out v))
{
return new ParamValue(v);
}
return null;
}
}
}
使用param类作为值的集合,您可以将返回值转换为您想要的每种类型。
答案 8 :(得分:0)
您可以使用Genric类型元组
public Tuple<T, T> MySuperMethod()
{
int number = 1;
string text = "Batman";
return new Tuple<int, string>(number, text);
}
.NET Framework直接支持一到七个元组 元素。此外,您可以创建八个或更多元素的元组 通过将元组对象嵌套在Tuple对象的Rest属性中。
https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.100).aspx