Имеет ли С# эквивалент decltype в С++ 11?

Будучи уже знакомым с C++ и попробовав некоторые из новых возможностей C++ 11, я решил поближе познакомиться с С#.

Как и ожидалось, принципы программирования похожи, но некоторые функции отличаются. Различия и сходства - это то, что я наблюдаю, и поэтому я решил спросить, есть ли в С# эквивалент decltype в C++ 11?

int x = 4;
decltype(x) y = 16;

В приведенном выше примере 'var' будет работать очень хорошо, поэтому вот пример того, когда нужен decltype. Если я только условно вызываю функцию, тогда мне нужно объявить переменную, которая будет содержать результат, без использования 'var', как показано здесь:

var pendingProcessData = trace.UseProcesses();
// Only request CPU scheduling data when it is actually needed, to avoid
// unecessary trace processing costs. Unfortunately this means that the
// 
IPendingResult<ICpuSchedulingDataSource> pendingSchedulingData = null;
if (showCPUUsage)
    pendingSchedulingData = trace.UseCpuSchedulingData();

trace.Process();

ICpuSchedulingDataSource schedulingData = null;
if (showCPUUsage)
    schedulingData = pendingSchedulingData.Result;

С помощью decltype я мог бы сказать что-то вроде этого:

var pendingProcessData = trace.UseProcesses();
// Only request CPU scheduling data when it is actually needed, to avoid
// unecessary trace processing costs. Unfortunately this means that the
// 
decltype(trace.UseCpuSchedulingData()) pendingSchedulingData = null;
if (showCPUUsage)
    pendingSchedulingData = trace.UseCpuSchedulingData();

trace.Process();

decltype(pendingSchedulingData.Result) schedulingData = null;
if (showCPUUsage)
    schedulingData = pendingSchedulingData.Result;

Это расширяет удивительность 'var' и спасло бы меня от отслеживания конкретных типов. Чтобы было ясно, мне все равно, какие типы pendingSchedulingData и schedulingData так заставляют меня понять это и упомянуть об этом в коде, которые имеют реальную стоимость, но не имеют значения.

Ответы

Ответ 1

В С# нет эквивалента decltype.

Может быть, вывод типа будет ближайшей функцией decltype:

int x = 4;
var y = x + 1;

Но нет никакой синтаксической функции, которая позволила бы объявить переменную стробированную типизацию с типом, выведенным из другой заданной переменной или выражения.