Ну, вы можете захватить статическое свойство таким образом:
CaptureProperty<string, Encoding>(x => Encoding.UTF8);
Затем вам нужно предоставить "фиктивное" значение во время выполнения ...
Альтернативой может быть предоставление другой перегрузки только с одним аргументом типа:
void CaptureProperty<T>(Func<T> func)
{
// Whatever
}
Использование выглядит так:
CaptureProperty<Encoding>(() => Encoding.UTF8);
Это то, что вы ищете?
Если вы хотите объединить их внутренне, вы можете иметь «фиктивный» закрытый вложенный тип того же типа, что и CaptureProperty
, и реализовать статическую версию следующим образом:
void CaptureProperty<T>(Func<T> func)
{
CaptureProperty<DummyType, T>(x => func());
}
Тогда вы можете обнаружить, что тип «источника» равен DummyType
, когда вам нужно будет вызвать функцию позже. Это может или не может быть полезной идеей в зависимости от того, что еще вы делаете:)