c# – 为readonly属性赋值,使用固定值而不是变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为readonly属性赋值,使用固定值而不是变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1267字,纯文字阅读大概需要2分钟。
内容图文
![c# – 为readonly属性赋值,使用固定值而不是变量](/upload/InfoBanner/zyjiaocheng/781/cd836a493cca4b3d8ff279c78824fb6e.jpg)
使用Entity Framework创建索引并具有以下代码:
var op = new CreateIndexOperation
{
Columns = { "COL_A", "COL_B", "COL_C" },
IsUnique = true,
Name = "INDEX_NAME",
Table = "TABLE_NAME"
});
这编译并按预期工作.尝试将此重构为以下方法(本示例简化):
private void AddIndex(params string[] columns)
{
var op = new CreateIndexOperation
{
Columns = columns.ToList(),
IsUnique = true,
Name = "INDEX_NAME",
Table = "TABLE_NAME"
});
}
此方法抛出以下编译器错误:
Property or Indexer 'IndexOperation.Columns' cannot be assigned to -- it is read only
查看MSDN documentation,这似乎是正确的,Columns属性没有setter.但是,如果是这种情况,为什么第一个代码块不会抛出编译器错误,但是第二个代码确实在我尝试从变量设置此值的地方呢?
解决方法:
这是因为当您使用第一个代码时使用collection-initializer,第二个示例使用经典的setter方法(当然不存在).这意味着在第一个例子中你实际上是在调用这样的东西:
var op = new CreateIndexOperation();
op.Columns.Add(...);
op.IsUnique = true;
op.Name = "INDEX_NAME";
op.Table = "TABLE_NAME";
正如您所看到的,您没有设置属性,而是在getter返回的对象上调用方法.
这当然假设Columns在类的构造函数中初始化.否则你会得到一个NullReferenceException.
然而,第二个代码编译为:
var op = new CreateIndexOperation();
op.Columns = columns.ToList();
op.IsUnique = true;
op.Name = "INDEX_NAME";
op.Table = "TABLE_NAME";
内容总结
以上是互联网集市为您收集整理的c# – 为readonly属性赋值,使用固定值而不是变量全部内容,希望文章能够帮你解决c# – 为readonly属性赋值,使用固定值而不是变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。