如何将对象强制转换为匿名 T

How to cast object to Anonymous T

提问人:Uğur Demirel 提问时间:4/20/2023 最后编辑:FlorianUğur Demirel 更新时间:4/21/2023 访问量:87

问:

我在使用 C 时遇到问题#

首先,我的辅助功能是为了更好地理解

public static class Extensions {
    public static IEnumerable<T> ToEnumerable<T>(this T value) {
        yield return value;
    }
    public static dynamic ToDynamic(this object value) {
        IDictionary<string, object> e = new ExpandoObject(); 
        foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(value.GetType())) { e.Add(item.Name, item.GetValue(value));
        return e;
    }
    public static IEnumerable<T> ToCast<T>(this IEnumerable<object> value, T sample) where T: class {
        return null; /* HELP */
    }
    public static T ToCastFirstorDefault<T>(this object value, T sample) where T: class {
        return value.ToEnumerable().ToCast(sample).Take(1).FirstOrDefault();
    }
}

在控制器端有一个对象数据,如示例所示

object Model = new { take = 10, data = new object[] { new { tarih = DateTime.MaxValue, proje = "Lorem Ipsum", durum = true } } };

我可以通过使用 ToDynamic、ToEnumerable 函数在 .cshtml 页面端使用它

var dy = Model.ToEnumerable().Select(x => x.ToDynamic()).Select(x => new
    {
        take = (int)x.take,
        data = ((object[])x.data).Select(y => y.ToDynamic()).Select(y => new
        {
            tarih = (DateTime)y.tarih,
            proje = (string)y.proje,
            durum = (bool)y.durum
        })
    }).Take(1).FirstOrDefault();

尽管此构建 100% 正常工作,但当有更多属性时,根本不是用户友好的

我希望我可以使用 ToCast、ToCastFirstorDefault 函数,如我在下面的示例中所写。 可能吗?

var rslt = Model.ToCastFirstorDefault(new {
    take = 0,
    data  = default(object[])
});

艺术

var rslt = Model.ToCastFirstorDefault(new {
    take = 0,
    data  = default(object[])
}).ToEnumerable().Select(x=> new {
    x.take,
    data = x.data.ToCast(new { tarih = default(DateTime), proje = "", durum = false })
}).Take(1).FirstOrDefault();

由于匿名类型,我无法使用 Convert.ChangeType。

C# 对象 动态 转换 IEnumerable

评论

0赞 YungDeiza 4/20/2023
这回答了你的问题吗?将对象转换为 T
0赞 Uğur Demirel 4/20/2023
@YungDeiza 匿名类型不可 IConvertible。我在发布之前查看了相关文章。
0赞 YungDeiza 4/20/2023
对不起,这个怎么样:stackoverflow.com/a/1409776/19214431
0赞 Uğur Demirel 4/20/2023
@YungDeiza在我尝试其结构 CastTo<T> 函数之前。结果异常:f_Anonymous143'1[System.Object[]] not convert f_Anonymous0'1[System.Object[]]

答: 暂无答案