首页 > 解决方案 > 匿名实例化期间对象初始值设定项中的输出参数

问题描述

如果我有一个包含公共 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;
    }
});

标签: c#outobject-initializers

解决方案


我非常同意 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);

推荐阅读