Имеет ли С# эквивалент 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;
Но нет никакой синтаксической функции, которая позволила бы объявить переменную стробированную типизацию с типом, выведенным из другой заданной переменной или выражения.