3

タイプビルダーを使用して、タイプを動的に作成しても問題ありません。匿名タイプからこれを行うことは可能でしょうか?

私はこれまでにこれを持っています。

//CreateType generates a type (so that I can set it's properties once instantiated) from an //anonymous object. I am not interested in the initial value of the properties, just the Type.
 Type t = CreateType(new {Name = "Ben", Age = 23});
 var myObject = Activator.CreateInstance(t);

タイプ「t」をタイプ引数として使用することは可能ですか?

私の方法:

public static void DoSomething<T>() where T : new() 
{
}

動的に作成されたタイプ「t」を使用してこのメ​​ソッドを呼び出したいと思います。私が電話できるように;

DoSomething<t>(); //This won't work obviously
4

1 に答える 1

1

はい、可能です。型を型引数として使用するには、次のMakeGenericTypeメソッドを使用する必要があります。

// Of course you'll use CreateType here but this is what compiles for me :)
var anonymous = new { Value = "blah", Number = 1 };
Type anonType = anonymous.GetType();

// Get generic list type
Type listType = typeof(List<>);
Type[] typeParams = new Type[] { anonType };
Type anonListType = listType.MakeGenericType(typeParams);

// Create the list
IList anonList = (IList)Activator.CreateInstance(anonListType);

// create an instance of the anonymous type and add it
var t = Activator.CreateInstance(anonType, "meh", 2); // arguments depending on the constructor, the default anonymous type constructor just takes all properties in their declaration order
anonList.Add(t);
于 2013-03-08T11:15:57.363 に答える