2011-05-21 91 views
0

決定有沒有辦法做這樣的事情:通用參數將通過一個getter

public interface ISomething { 
     Type e { get; } 
     Expression<Func<e, long>> GetExpression(); //COMPILE ERROR 
} 

我得到的編譯錯誤:e是財產,但使用像一個類型。

我想通用參數將由一個getter決定 - 是否有可能?

+0

你所說的「泛型參數將由吸氣決定」是什麼意思? – BoltClock 2011-05-21 23:53:11

+0

@BoltClock:在上面的例子中,Expression > GetExpression();標有編譯錯誤。 – Naor 2011-05-21 23:54:08

+0

你將不得不使用反射。 – 2011-05-22 00:06:15

回答

2

這應該可以做到,儘管我不太瞭解e屬性的用途。

public interface ISomething<T> 
{ 
    T SomeProperty { get; } 
    Expression<Func<T, long>> GetExpression(); 
} 
+0

有沒有辦法在「public interface ISomething 」中防止泛型? e屬性應該定義泛型類型。 – Naor 2011-05-21 23:56:54

+1

@Naor:不,沒有。泛型類型是在編譯時確定的,而不是在運行時確定的。 – SirViver 2011-05-21 23:58:16

1
public interface ISomething<T> { 
{ 
     Expression<Func<T, long>> GetExpression(); 
} 
+0

有沒有辦法在「public interface ISomething 」中防止泛型? – Naor 2011-05-21 23:57:13

4

如果你想保持ISomething非通用那麼您只能GetExpression通用:

public interface ISomething 
{ 
    Expression<Func<T, long>> GetExpression<T>(); 
}