转换匿名类型以访问属性
在访问其属性时,将匿名类型转换回其原始类型可能会出现问题。为了解决这个问题,我们可以利用一种技巧来推断正确的类型。
欺骗编译器
方法 Cast
private static T Cast<T>(T typeHolder, Object x) { // typeHolder above is just for compiler magic // to infer the type to cast x to return (T)x; }
用法:
var a = new { Id = 1, Name = "Bob" }; TestMethod(a); ... private static void TestMethod(Object x) { // This is a dummy value, just to get 'a' to be of the right type var a = new { Id = 0, Name = "" }; a = Cast(a, x); Console.Out.WriteLine(a.Id + ": " + a.Name); }
替代转换方法
另一种方法是创建一个扩展方法 CastTo
private static T CastTo<T>(this Object value, T targetType) { // targetType above is just for compiler magic // to infer the type to cast value to return (T)value; }
用法:
var value = x.CastTo(a);
建议
虽然这些技术允许转换匿名类型,但它为了清晰和易用性,建议使用真实类型。
以上是如何在 C# 中转换匿名类型以访问其属性?的详细内容。更多信息请关注PHP中文网其他相关文章!