将对象转换为System.Linq.Enumerable

时间:2014-11-12 07:45:32

标签: c# linq

我有一个方法,它接受一个对象,该对象使用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()方法中,我希望能够检查参数是否是某种Enumerable,如果是,那么就可以使用“ToList()”。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

也许这可以帮助你重构你的方法。

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());
}