2017-03-01 10 views
1

私はパラメータとしてFunc<T, long>のメソッドを持っています。私はこのような方法を呼びたい:long型の値を返すジェネリック型のFuncを実行

Write(x => x.Id, "Some info"); 

このメソッドは次のようになります。私が持っている問題はその方法の中にある。私はlongの値を得るために関数を実行する方法を知らない。

public void Write<TEntity>(Func<TEntity, long> func, string info) 
{ 
    var id = func(); // Doesn't work, func() needs an argument... 
} 

これはどのように機能しますか?どのように機能を実行できますか?

+1

よくインスタンスを渡します。引数としてTEntityを指定します。そうでなければ、あなたは "Id"を読もうとしていますか? – Evk

+0

@Evk 'func(TEntity)'を意味するなら、それは動作しません。 *** TEntityは型であり、与えられたコンテキストでは無効です***。 – w00

+1

いいえ、インスタンスを意味しません。 TEntityがYourTypeであり、YourType(var x = new YourType(){Id = 1})のインスタンスがあるとします。それをあなたの関数に渡します> var id = func(x)。あなたが読もうとしている**のIDについて考えてみてください。 – Evk

答えて

2

確かに動作しません、あなたはn引数が必要です。解決策は、あなたが何をしようとしているかによって異なります。おそらく、

class TEntity 
{ 
    public void Write<TEntity>(Func<TEntity, long> func, string info) 
    { 
     var id = func(this); 
    } 
} 

3):

1)あなただけのパラメータとしてTEntityを与えることができる:

public void Write<TEntity>(Func<TEntity, long> func, TEntity entity, string info) 
{ 
    var id = func(entity); 
} 

2)この関数はTEntityクラスの内部にある場合は、この引数でそれを呼び出すことができますその場合、引数なしでfuncとしてパラメータを書き換えます。

public void Write<TEntity>(Func<long> func, string info) 
{ 
    var id = func(); 
} 
関連する問題