4

タイトルはかなり紛らわしいです。例を挙げて説明しようと思います。以下のコードを検討してください。

String[] str={"Apple","Banana","Cherry","Orange"};
var anoCollection=from e in str select new
                                         {
                                          ch=e[0],
                                          length=e.Length
                                         }
dataGridView.DataSource=anoCollection.ToList(); //TypeInitializationException

上記の場合の方法については、そのタイプについて言及する必要があると思いToList<T>()ます。しかし、ここで匿名タイプについて言及するにはどうすればよいですか?

4

2 に答える 2

3

匿名タイプについて直接言及することはできませんが、言及する必要はありません。<T>ジェネリック型推論は、 inを指定する必要がないことを意味します.ToList<T>()-コンパイラーは自動的に発明された型を注入します。

匿名タイプを参照する方法はいくつかあります。

  • 経由someObj.GetType()、ここで、someObjは匿名型のインスタンスです
  • ジェネリックを介して、として、Tジェネリック型推論を介してジェネリックメソッドを呼び出すことによって(のようにToList()
  • 反射のさまざまな他の使用法、Tビアを引っ張るGetGenericTypeParameters()
于 2013-01-03T13:23:41.677 に答える
0

これはあなたが求めているものではないかもしれませんが、後で行にDataBoundItemを使用したい場合は、次のように行うことができます。

var item = TypeExtensions.CastByPrototype(row.DataBoundItem, new { ch = 'a', length = 0});
//you can use item.ch and item.length here
Trace.WriteLine(item.ch);

このメソッドのサポートで:

public static class TypeExtensions
{
    public static T CastByPrototype<T>(object obj, T prototype)
    {
        return (T)obj;
    }
}
于 2013-01-03T13:32:02.587 に答える