将对象强制转换为System.Linq.Enumerable

本文关键字:System Linq Enumerable 转换 对象 | 更新日期: 2023-09-27 18:30:08

我有一个方法,它接收一个对象,该对象使用Json.Net来序列化和反序列化该对象。它看起来像这样:

internal static object Clone(this object parameter)
{
    var type = parameter.GetType();
    var serializedObject = JsonConvert.SerializeObject(parameter);
    return JsonConvert.DeserializeObject(serializedObject, type);
}     

我的问题是,我无法控制哪些对象被传递到这个中。例如,如果有人做了这样的事情:

var result = myListOfStrings.Select(x => x);
result.Clone();

传入的对象的类型为WhereSelectListIterator `2

我意识到如果我只是做

result.ToList().Clone();

这个问题会解决的。然而,设置比这里描述的要复杂得多,我根本无法控制它传递到克隆中的内容。因此,在我的Clone()方法中,我希望能够检查参数是否是某种可枚举的,如果是,请对其执行"ToList()"

有什么建议吗?

将对象强制转换为System.Linq.Enumerable

也许这有助于重构方法。

internal static object Clone(this object parameter)
{
    if (parameter is IEnumerable)
        parameter = (parameter as IEnumerable).Cast<object>().ToList();
    var serializedObject = JsonConvert.SerializeObject(parameter);
    return JsonConvert.DeserializeObject(serializedObject, parameter.GetType());
}