Reputation: 303
Being already familiar with C++ and after trying some of the new features C++11 offers, I decided to become more familiar with C#.
As expected, programming principles are similar, but some of the features are different. The differences and similarities are what I am looking after and therefore I decided to ask if C# has an equivalent to decltype in C++11?
int x = 4;
decltype(x) y = 16;
In the example above 'var' would work just fine, so here is an example of when decltype is needed. If I only conditionally call a function then I need to declare the variable that will hold its result without using 'var', as shown here:
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;
With decltype I could say something like this:
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;
This extends the awesomeness of 'var' and would have saved me from tracking down what the concrete types are. To be clear, I don't care what the types of pendingSchedulingData and schedulingData are so forcing me to figure that out and mention it in the code has real cost but no value.
Upvotes: 20
Views: 3988
Reputation: 64933
In C# there's no equivalent to decltype
.
Maybe type inference would be the nearest feature to decltype
:
int x = 4;
var y = x + 1;
But there's no actual syntax feature that would allow to declare a storngly-typed variable with the type inferred from other given variable or expression.
Upvotes: 12