2017-06-29 25 views
0

私はC#の要点を読んでいます。コンパイルエラー:ジェネリック型を使用するには、N型の引数が必要です

この単純なコードは

using System; 

namespace prueba 
{ 
class Program 
{ 
    public delegate int Transformer(int x); 

    static void Main(string[] args) 
    { 
     Transformer t = Square; 
     t += Cube; 
     int result = t(3); 
     Transform(5, Square); 
     Console.WriteLine(result); 
     Console.Read(); 
    } 

    static int Square(int x) => x * x; 


    static int Cube(int x) => x * x * x; 

    public static void Transform(int x, Transformer t){ 
     t(x); 
    } 
    } 
} //prints => 27 

ワークス私はこのコード

using System; 

namespace prueba 
{ 
class Program 
{ 
    public delegate int Transformer<T>(T arg); 

    static void Main(string[] args) 
    { 
     Transformer t = Square; // Compilation Error at this lane 
     t += Cube; 
     int result = t(3); 
     Transform(5, Square); 
     Console.WriteLine(result); 
     Console.Read(); 
    } 

    static int Square(int x) 
    { 
     Console.WriteLine(x); 
     return 0; 
    } 

    static int Cube(int x) => x * x * x; 

    public static void Transform<T>(T x, Transformer<T> t){ 
     t(x); 
    } 
    } 
} 

を使用してジェネリックを使用しようとすると、私はコンパイルできません:this

を私はこれまで、本当に新たなんだと私は1つの型の引数を必要とすることを意味しない、私がしたことは、汎用型(T)のint型の代理人を変更することです。誰か助けてくれますか?

Transformer<int> t = Square; 

を一方、あなたはここで、一般的なメソッドを使用する必要があることを確信している:

+2

'指定せずに 'T':コードの

あなたのラインはT使用したいを指定する必要があります。これは、このような変数を宣言するときには許可されません。あなたは明示的にし、状態 '変圧器 =正方形;' –

+0

ああ、私は、あなたが動的なvarのように動作すると思ったが、間違っていた、本当にありがとう – Ferus7

答えて

2

エラーメッセージに示すように、汎用タイプTransformer<T>を使用していますが、汎用引数を指定しないでください。

これは許可されていません。あなたはジェネリック型 `変圧器を 使用しようとしている

Transformer<int> t = Square; 
2

これは、あなたがそれを定義するときに、あなたの変数の型は、型引数を必要とすることを意味しますか?あるいは、代議員はint以外の引数を取るでしょうか?

+1

私は代理人の機能をテストしていたテストプロジェクトは、それがどのように動作するかを確認するために、btwありがとうございます – Ferus7

+0

@ Ferus7うん、私は実際には実際の事例ではないと考えました。どういたしまして :) – silkfire

関連する問題