2017-03-01 41 views
1

我有一個Func<T, long>作爲參數的方法。我想這樣調用方法:執行與泛型應該返回一個long值的函數

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

那麼通過實例o作爲論點的實體。否則,你要讀哪個「ID」? – Evk

+0

@Evk如果你的意思是'func(TEntity)',那麼這是行不通的。 *** TEntity是一種類型,在特定情況下無效***。 – w00

+1

不,我的意思是實例。說TEntity是一些YourType,你有一個YourType的實例(var x = new YourType(){Id = 1})。將它傳遞給你的函數> var id = func(x)。想想**你正在嘗試閱讀的是什麼? – Evk

回答

2

確定它不起作用,你需要n個參數。解決方案取決於你真正要做什麼。

1)你可以給TEntity作爲參數:

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

2)如果此功能TEntity類的內部,你可以用這個參數調用它:

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

3)也許你不需要任何TEntity來獲得一個Id,在這種情況下,將你的參數改寫爲一個沒有參數的func:

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