首页 >后端开发 >C++ >如何在 C# 中将对象转换为匿名类型?

如何在 C# 中将对象转换为匿名类型?

Linda Hamilton
Linda Hamilton原创
2025-01-05 22:46:40120浏览

How Can I Cast an Object to an Anonymous Type in C#?

转换为匿名类型

问题是如何将对象转换为匿名类型。匿名类型是使用对象初始值设定项创建的,通常用作存储数据的便捷方式。但是,它们没有类型名称,这使得转换它们变得困难。

将对象转换为匿名类型的一种方法是使用一种技巧,该技巧涉及使用所需匿名的虚拟值类型。该虚拟值用于推断要转换的对象的类型。下面是一个示例:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn