繁体   English   中英

将对象转换为System.Linq.Enumerable

[英]Casting object to System.Linq.Enumerable

我有一个方法,该方法接受一个对象,该对象使用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的内容。 因此,在我的Clone()方法中,我希望能够检查参数是否为某种Enumerable,如果是,则对它进行“ ToList()”检查。

有什么建议么?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM