c# - 将对象转换为 System.Linq.Enumerable

标签 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 的内容。因此,在我的 Clone() 方法中,我希望能够检查参数是否为某种可枚举类型,如果是,则对其执行“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());
}

关于c# - 将对象转换为 System.Linq.Enumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26881718/

相关文章:

c# - 如何根据运行总计在 Linq 中分组和/或选择

c# - 扩展 asp.net 身份 OWIN 身份验证框架以使用 Amazon DynamoDb

.net - Linq:获取DataContext中所有表的列表

c# - 从 Linq-to-Entities 中选择 Linq-to-XML?

c# - linq select within where子句

c# - linq,计算counts的个数

c# - 将窗口停靠在另一个窗口中

c# - 这是什么意思? [C#]

c# - 我想使用正则表达式替换文本

c# - 实体数据模型向导不显示新表