在C#中内联操作对象的推荐方法是什么?

在C#中内联操作对象的推荐方法是什么?,c#,C#,我试图从我的WebApi操作中传回一个相当健壮的匿名对象,在这样做的过程中,我希望将所有相关的逻辑保持在一起。我遇到的问题是,我无法以这种方式设置对象的属性。我的第一个解决方案是执行以下操作: AwbNumber = new Func<JSchema>(() => { var s = gen.Generate(typeof(string)) s.Pattern = "^[0-9a-zA-Z]

我试图从我的WebApi操作中传回一个相当健壮的匿名对象,在这样做的过程中,我希望将所有相关的逻辑保持在一起。我遇到的问题是,我无法以这种方式设置对象的属性。我的第一个解决方案是执行以下操作:

AwbNumber = new Func<JSchema>(() =>
            {
                var s = gen.Generate(typeof(string))
                s.Pattern = "^[0-9a-zA-Z]{0,32}$";
                return s;
            })()


我对这个解决方案很满意,但这似乎是一种常见的情况,所以我想知道在.NET中是否已经存在类似的东西,但我没有找到。或者我完全错过了这个问题的另一个解决方案吗?

除了其他,您的最后一个代码片段可以更短一些-只是
AwbNumber=gen.Generate(typeof(string))。操纵(s=>s.Pattern=“^[0-9a-zA-Z]{0,32}$”不需要是lambda语句。那么,在第一个代码片段中设置Pattern属性是否无效?gen.Generate是如何实现的?您的解决方案似乎是目前唯一适用的解决方案。C#7将为我们带来一个带有{***}
的新子句
***,它将在这种情况下帮助您。@Gosha_Fighten
gen.Generate()
是一种工厂方法。它直接取自我的代码,但它可以与
newjschema()
或任何其他
new
调用相媲美。@Caramiriel说得好。对于我的用例来说,这不应该是一个问题,但要记住这一点。
public static class ObjectExtensions
{
    public static T Manipulate<T>(this T obj, Action<T> initializer)
    {
        initializer(obj);
        return obj;
    }
}
AwbNumber = gen.Generate(typeof(string)).Manipulate(
                (s) =>
                {
                    s.Pattern = "^[0-9a-zA-Z]{0,32}$";
                })