问题是如何将对象转换为匿名类型。匿名类型是使用对象初始值设定项创建的,通常用作存储数据的便捷方式。但是,它们没有类型名称,这使得转换它们变得困难。
将对象转换为匿名类型的一种方法是使用一种技巧,该技巧涉及使用所需匿名的虚拟值类型。该虚拟值用于推断要转换的对象的类型。下面是一个示例:
public class Program { public static void Main(string[] args) { 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.WriteLine(a.Id + ": " + a.Name); } 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; } }
将对象强制转换为匿名类型的另一种方法是使用通用扩展方法。此方法可用于将对象强制转换为任何匿名类型。下面是一个示例:
public static class AnonymousTypeExtensions { public 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; } } public class Program { public static void Main(string[] args) { var a = new { Id = 1, Name = "Bob" }; var b = a.CastTo(new { Id = 0, Name = "" }); Console.WriteLine(b.Id + ": " + b.Name); } }
但是,需要注意的是,以这种方式使用匿名类型可能很棘手,一般不建议这样做。最好使用真实类型。
以上是如何在 C# 中将对象转换为匿名类型?的详细内容。更多信息请关注PHP中文网其他相关文章!