だから私はC#を使い始めたJavaの人です。コーディングしていて、ジェネリックメソッドを作成し始めました。私が書いたものは実行され、コンパイルされますが、私は、誰かが私にこれを説明することができます願っています:タイプを指定しないC#の汎用メソッド
だから、次のように私は定義されている一般的な方法があります:
public static List<T> CopyAsList<T>(IEnumerable<T> list, Object lockObject)
{
if (list != null)
{
lock (lockObject)
{
return new List<T>(list);
}
}
return null;
}
をしかし、私には奇妙なことは、私が今までに指定せずにこのジェネリックメソッドを呼び出すことができるということですT
と動作します:
List<String> strings = new List<string>() { "a", "b", "c"};
List<int> ints = new List<int>() { 1,2,3};
object lockObject = new object();
foreach (string s in CopyAsList(strings, lockObject))
{
Console.WriteLine(s);
}
foreach (int i in CopyAsList(ints, lockObject))
{
Console.WriteLine(i);
}
ジェネリック型を指定することなくコードをコンパイルするにはどうすればいいですか? C#は実行時に型を推測しますか?
何のC#は、実行時にはもうありません。 – Gabe
コンパイル時にC#コンパイラが型を推論します。副報では、CLR(DLR)は実行時に型を推論できます。C#の 'dynamic'キーワードを参照してください。 – kizzx2
kizzx2:OPはコンテキストから 'dynamic'を削除する' .net-3.5'で質問にタグ付けしました。実行時には型推論がありません。DLRはタイプを決定するためにリフレクションを使用します。 – Gabe