我有一个函数根据传递给此函数的参数返回不同类型的对象。 是否有可能根据C#4.0中的某些标识符将这些不同的对象类型添加到集合中? 通常我们会这样做 列表或列表 但我想要一个可以添加任何类型对象的集合。将不同的对象类型添加到c#4.0集合
回答
你可以使用object[]
,List<object>
,ArrayList,IEnumerable,...但如果这些类型都有一个共同的基本类型这将是更好地坚持一个强类型集合。
我想念ArrayList :( – leppie 2010-08-25 08:17:01
+1你在那里得到了我:) – 2010-08-25 08:17:30
是的,它被称为object
。例如:
var objlist = new List<object>();
objlist.Add(1);
objlist.Add(true);
objlist.Add("hello");
如果你想有一个集合,可以添加对象的任何类型的再List<object>
是最合适的类型。
早期版本的C#(非泛型)中的集合可以包含任何类型的对象。如果它们是值类型的,它们将被装入对象中。 当您需要使用它们时,您可以将其转换为原始类型。
如果这是你想要的,你可以使用List<Type>
来保存类型信息。类型[],Hashtable等也很好。您可以使用typeof运算符来获取类型或使用Object.GetType()。
真的,你的收藏应该尽可能具体,因为你可以做到。当你说不同类型的
的
对象做这些对象有什么共同点?他们是否实现了通用接口?
如果是这样你就可以专注该接口List<IMyInterface>
上的列表中,否则会
List<object>
做你想做的。更新
没有,真的没有。
对不起,但我会质疑你的设计。
如果你有一个不同的对象集合,你如何决定如何使用其中一个对象?
你将有一个大型的switch语句来切换对象的类型,然后你转换到一个特定的对象并使用它。您的工厂方法中也有类似的switch语句来创建对象。
面向对象的好处之一是,如果你正确设计你的对象,那么你不需要做这些大的“如果它是这个对象做this.Method(),如果它是那个对象做那个.OtherMethod( )”。
我可以问一下,为什么要将不同的物体放入同一个集合中?你有什么好处?
他们虽然这样做,但他们共享相同的父母。最糟糕的部分是他们有不同的实施和其他方法。所以,如果我给接口,我会错过个别类中的其他方法。有没有可以建议的模式实现? – SharpD 2010-08-25 08:26:38
像其他海报推荐的那样,您可能想要定义一个接口,例如IListableObject
,其中包含一些您的对象需要实现的方法,而不是仅仅制作一个List<object>
。这将使得使用这些对象的代码更容易编写,并防止不需要的对象进入集合中。
我的建议:
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类作为收藏品,以你的价值观,你可以转换回你希望每一个类型。
你可以使用Genric类型
public Tuple<T, T> MySuperMethod()
{
int number = 1;
string text = "Batman";
return new Tuple<int, string>(number, text);
}
的元组.NET框架直接支持元组一至七个 元素。另外,通过将元组对象嵌套到Tuple对象的Rest属性中,可以创建八个或更多个元素的元组 。
https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.100).aspx
- 1. 对象添加到集合不知道它的泛型类型
- 2. Mongokit将对象添加到集合
- 3. 将C++对象添加到Objective-C类
- 4. NHibernate域模型 - 将子对象添加到集合
- 5. 将几个相同类型的对象添加到XML文件
- 6. MVC2将对象集合添加到另一个对象
- 7. 如何将不透明类型添加到集合
- 8. 将同一图像对象添加到集合中会从第一个添加的集合中删除图像
- 9. 将元素添加到集合中,将元素添加到包含此集合的对象的所有实例
- 10. Backbone.js集合不添加对象
- 11. 将模型添加到骨干集合
- 12. 将模型添加到Backbone.localstorage集合
- 13. MongoDb在集合中选择不同的对象类型
- 14. .Net 4.0 C# - 添加到没有手动循环的集合
- 15. 将1类型的对象转移到不同类型的对象
- 16. 如何防止多次添加相同的JSON对象或模型到集合?
- 17. 如何在c#中的集合中保存不同类型的对象?
- 18. Backbone:将模型添加到集合视图中的集合?
- 19. C# - 不同类型的对象列表
- 20. UnsupportedOperationException将类添加到集合
- 21. 创建在C#类型“类型”的对象的自己的集合类型
- 22. 如何将对象添加到对象的散列图内的有序集合
- 23. C#WPF在新窗口中添加对象到集合
- 24. 从单个对象继承的不同类型的集合与超级对象的单个集合
- 25. Xamarin:将对象添加到可观察集合中的Objective-C异常
- 26. 如何在不知道类型的情况下将对象添加到集合中?
- 27. 将eleObjs添加到集合
- 28. 将项添加到集合
- 29. 类型“...”的值不能添加到'uielementcollection'类型的集合或字典
- 30. Vba将集合添加到对象属性
是您的函数对象的返回类型(或所有对象类型返回实现一些接口)? – 2016-08-20 09:41:40