轉換匿名類型以存取屬性
在存取其屬性時,將匿名類型轉換回其原始類型可能會出現問題。為了解決這個問題,我們可以利用一個技巧來推斷正確的類型。
欺騙編譯器
方法 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中文網其他相關文章!