c# - 匿名实例化期间对象初始值设定项中的输出参数
问题描述
如果我有一个包含公共 int 属性(公共访问器)的对象,在实例化时初始化此属性时如何将字符串解析为 int ?
// Given initialized DataTable table;
// Given public int IntProperty {get; set;} in public class MyObject
table.Rows.Select(row => new MyObject
{
int.TryParse(row["stringValue"], IntProperty), // MyObject.IntProperty is unknown here
IntProperty = int.TryParse(row["stringValue"], ... ) // IntProperty is known but what about the out int result argument of Int32.TryParse ?
});
编辑:我可以做到这一点,但想知道是否有办法直接在对象初始化器中做到这一点:
table.Rows.Select(row => {
int.TryParse(row["stringValue"], out int intProperty);
return new MyObject
{
IntProperty = intProperty;
}
});
解决方案
我非常同意 Jeroen Mostert。与其“将所有内容压缩到对象初始化器中”,不如让您的代码可读且易于理解。比它可能编译没有问题:
var result = new List<MyObject>();
foreach(var row in table.Rows)
{
var instance = new MyObject();
int value;
if(int.TryParse(row["stringValue"], out value)
instance.IntProperty = value;
result.Add(instance);
}
在 C#7 中,您还可以将其简化为以下内容:
var instance = new MyObject();
if(int.TryParse(row["stringValue"], out int value)
instance.IntProperty = value;
result.Add(instance);
推荐阅读
- json - “MZ”(意外令牌)是什么字符?
- python - 拒绝 Heroku 推送
- html - 砌体网格的浮动问题
- google-sheets - Google表格中的动态日历-如何从列表中查询项目
- c# - ASP.NET 安装程序类,为什么我不能使用 IInstaller 接口?
- javascript - 在回调中使用异步 IIFE
- oracle - 无法禁用触发器 Oracle
- javascript - 使用 setInterval 和 clearInterval 设置状态的问题
- gradle - Gradle:获取依赖项和许可证列表
- angular-ngselect - 没有搜索的 ng-select 不会导航到按键值(正常选择将从下拉菜单导航到键开始字符)