gpt4 book ai didi

C# 将对象转换为 List
转载 作者:太空宇宙 更新时间:2023-11-03 17:30:10 25 4
gpt4 key购买 nike

我需要将字符串列表转换为对象列表,但问题是我将此列表作为对象接收,因为它是一个参数,我不知道它是什么类型。

这是接收参数的函数:

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 问题”的事情:您心中有一个(错误的)解决方案,您是在询问错误的解决方案,而不是寻求解决实际问题的方法。

您不需要首先将字符串列表转换为对象列表,因此无需询问如何执行此操作。解决您的问题的正确方法是:

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 的情况。你是怎么陷入这种境地的?

关于C# 将对象转换为 List<object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42251471/

25 4 0