C# 将对象转换为列表<object>
C# Converting object to List<object>
我需要将字符串列表转换为对象列表,但问题是我将此列表作为对象接收,因为它是一个参数,我不知道它是什么类型。
这是接收参数的函数:
public static bool IsNotEmpty(object obj)
{
if (obj is ICollection)
{
IList<object> collection = (IList<object>)obj; // The cast throws error here
return IsNotEmpty(collection);
}
return true;
}
这是这一位使用的:
public static bool IsNotEmpty<T>(IList<T> aList)
{
return aList != null && aList.IsNotEmpty();
}
我该怎么做才能将其转换为对象列表,然后才能将其传递给其他函数? (如果有办法的话)
你正在做我们所说的 "XY question":你有一个(错误的)解决方案来解决你的问题,你问的是错误的解决方案,而不是寻求解决实际问题的方法。
您不需要首先将字符串列表转换为对象列表,因此无需询问如何执行此操作。解决您问题的正确方法是:
static class MyExtensions
{
public static bool Any(this IEnumerable sequence)
{
if (sequence == null)
throw new ArgumentNullException ... etc ...
if (sequence is ICollection)
return ((ICollection)sequence).Any();
foreach(object item in sequence)
return true;
return false;
}
public static bool Any(this ICollection collection)
{
if (collection == null) blah blah blah
return collection.Count > 0;
}
}
太棒了。现在你的方法是:
public static bool IsNotEmpty(object obj)
{
if (obj is IEnumerable)
return ((IEnumerable)obj).Any();
else
return true;
}
这里的想法是先去收集,因为这样可以避免不必要地枚举序列。那可能很昂贵。但是如果我们有一个包含项目但不是集合的序列,则枚举它的第一个元素。如果我们能成功,那么它就不是空的;如果我们不能,那么它是空的。
但更一般地说:你的方法的签名很不幸。如果可以避免,请不要陷入手头有 object
的情况。你是怎么陷入这种境地的?
public static bool IsNotEmpty(object obj)
{
var collection = obj as ICollection;
return collection == null || collection.Count > 0;
}
我需要将字符串列表转换为对象列表,但问题是我将此列表作为对象接收,因为它是一个参数,我不知道它是什么类型。
这是接收参数的函数:
public static bool IsNotEmpty(object obj)
{
if (obj is ICollection)
{
IList<object> collection = (IList<object>)obj; // The cast throws error here
return IsNotEmpty(collection);
}
return true;
}
这是这一位使用的:
public static bool IsNotEmpty<T>(IList<T> aList)
{
return aList != null && aList.IsNotEmpty();
}
我该怎么做才能将其转换为对象列表,然后才能将其传递给其他函数? (如果有办法的话)
你正在做我们所说的 "XY question":你有一个(错误的)解决方案来解决你的问题,你问的是错误的解决方案,而不是寻求解决实际问题的方法。
您不需要首先将字符串列表转换为对象列表,因此无需询问如何执行此操作。解决您问题的正确方法是:
static class MyExtensions
{
public static bool Any(this IEnumerable sequence)
{
if (sequence == null)
throw new ArgumentNullException ... etc ...
if (sequence is ICollection)
return ((ICollection)sequence).Any();
foreach(object item in sequence)
return true;
return false;
}
public static bool Any(this ICollection collection)
{
if (collection == null) blah blah blah
return collection.Count > 0;
}
}
太棒了。现在你的方法是:
public static bool IsNotEmpty(object obj)
{
if (obj is IEnumerable)
return ((IEnumerable)obj).Any();
else
return true;
}
这里的想法是先去收集,因为这样可以避免不必要地枚举序列。那可能很昂贵。但是如果我们有一个包含项目但不是集合的序列,则枚举它的第一个元素。如果我们能成功,那么它就不是空的;如果我们不能,那么它是空的。
但更一般地说:你的方法的签名很不幸。如果可以避免,请不要陷入手头有 object
的情况。你是怎么陷入这种境地的?
public static bool IsNotEmpty(object obj)
{
var collection = obj as ICollection;
return collection == null || collection.Count > 0;
}