問題は、オブジェクトを匿名型にキャストする方法です。匿名型はオブジェクト初期化子を使用して作成され、データを保存する便利な方法としてよく使用されます。ただし、これらには型名がないため、キャストが困難になる可能性があります。
オブジェクトを匿名型にキャストする 1 つの方法は、目的の匿名のダミー値を使用するトリックを使用することです。タイプ。このダミー値は、キャストされるオブジェクトのタイプを推測するために使用されます。以下に例を示します。
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 中国語 Web サイトの他の関連記事を参照してください。