7

匿名型のプロパティが関数のパラメーターである場合、関数内に匿名型を作成したいと考えています。

たとえば、関数の場合: private bool CreatePerson(string FirstName, string LasName, int Age, int height);

FirstName、LasName、Age、および height のプロパティを持つ匿名型があります。関数パラメーターの値は、匿名型のプロパティの値になります。

private bool CreatePerson(string FirstName, string LasName, int Age, int height)
    {
        // Get this method parameters
        MethodBase currentMethod =  MethodBase.GetCurrentMethod();
        ParameterInfo[] parametersInfo = currentMethod.GetParameters();

        // create an object of the parameters from the function.
        foreach (ParameterInfo paramInfo in parametersInfo)
        {
            // add a property with the name of the parameter to an anonymous object and insert its value to the property.
            // WHAT DO I DO HERE?
            ....
        }

        return true;
    }
4

2 に答える 2

3

私が正しく理解していて、実行時にプロパティを定義したい場合、これは不可能です。匿名型では、そこで定義した型を作成してから値を割り当てることができる場合がありますが、プロパティの名前はコンパイル時に認識されている必要があります。

実際、タイプはユーザーには匿名ですが、CLRには匿名ではありません。ildasm.exeまたはリフレクターでアセンブリを見ると、名前に常に奇妙な名前が含まれているこれらの匿名型が表示<>されます。

C#のダイナミクスはここで役立つかもしれませんが、私が知る限り、C#は、作成ではなく、タイプ情報がないオブジェクトとの通信に役立ちますが、私にはわからない方法があるかもしれません。

于 2010-10-24T13:07:11.263 に答える
0

「Linq to DataSet」のField<T>(String Name)設計パターンを使用できませんでしたか? 実際、DataTable を使用しない理由はありません。コンパイラは、フィールドが存在することを知る必要はなく、タイプ セーフにするための型だけを知る必要があります。これを行う理由の 1 つは、何らかのタイプのパーサーを実装してフィルターを生成したり、フィールド名を動的に構成したりするためです。

于 2011-01-31T14:51:52.493 に答える