2016-08-17 110 views
0

短版如何将`var`和`const`结合起来?

在C++中,我可以做到这一点...

const auto & help_id = help_type.functionHelpTypeId; 

我怎样才能做到这在C#?


龙版

我怎样才能让一个变量是在C#类字段或属性只读别名?

我有一个方法,我在我的函数顶部只读别名,以便使代码的其余部分更清晰一些,并且稍后保存一些输入内容。

 var help_id = help_type.functionHelpTypeId; 
     var changeset_version = changeset.version; 
     var helpPageType = help_type.helpPageType; 
     // &ct. 

我的问题是,由于这些都不是常量,任何人都可以重新分配它们或突变他们指的是,该物体是不是我的本意。为了知道这些只是类字段的只读别名,基本上必须研究整个函数,这是不正确的。

+1

简答:你不能。长(呃)答案:如果在对象构造函数中设置了值,则可以使用'readonly'。 – DavidG

+1

使用'const'和显式类型声明有什么错误?你尝试过吗? 'const int help_id = help_type.functionHelpTypeId;' – Shyju

+0

“任何人都可以重新分配...”你的意思是你担心你的代码维护者搞砸了吗?您可以在声明和分配变量的位置添加代码注释。 – adv12

回答

1

为了补充@ AlexeiLenkov的回答,您仍然可以创建一个匿名类型,其属性是只读的:

var help = new 
{ 
    help_id = help_type.functionHelpTypeId, 
    changeset_version = changeset.version, 
    helpPageType = help_type.helpPageType, 
}; 

help.help_id = 312; // CS0200: It is readonly 

然而,这只能是局部的范围内使用。另外,请注意引用类型是可变的,并且help本身也是引用类型。

+0

'help'变量仍然可以被改变。它引用的值不能,但变量本身可以。 – Servy

+0

@Servy我没有说它不是。事实上,它甚至暗示它是可变的,因为'help'是一个参考类型。也许,我应该重新说清楚,以便说清楚。 – Xiaoy312

+0

你说这个类型是可变的,当不是的时候,你提供了一个可变的变量,当这个问题特别要求一个变量*不是可变的。 – Servy

相关问题