C#是否有一个等价于C++11中的decltype

本文关键字:中的 decltype C++11 等价于 是否 有一个 | 更新日期: 2023-09-27 18:21:50

我已经熟悉C++,并且在尝试了C++11提供的一些新功能后,我决定对C#更加熟悉。

正如预期的那样,编程原理是相似的,但有些特性不同。差异和相似之处是我所关注的,因此我决定问C#是否与C++11中的decltype等价?

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"的惊人之处,并使我免于追踪具体类型。需要明确的是,我不在乎pendingSchedulengData和schedulingData的类型是什么,所以强迫我弄清楚并在代码中提及它确实有成本,但没有价值。

C#是否有一个等价于C++11中的decltype

在C#中没有等价的decltype

也许类型推断是最接近decltype:的特征

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

但并没有实际的语法功能允许用从其他给定变量或表达式推断出的类型来声明存储类型的变量。