問題是如何將物件轉換為匿名類型。匿名類型是使用物件初始值設定項建立的,通常用作儲存資料的便捷方式。但是,它們沒有類型名稱,這使得轉換它們變得困難。
將物件轉換為匿名類型的一種方法是使用一種技巧,該技巧涉及使用所需匿名的虛擬值類型。此虛擬值用於推斷要轉換的物件的類型。以下是一個範例:
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中文網其他相關文章!