简体   繁体   中英

Does C# have an equivalent to decltype in C++11?

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM