我很好奇是否有任何方法可以缩短这段代码,或者使其在一行/语句中,

        var terraformProcess = new Process();
        terraformProcess.StartInfo.FileName = "terraform";
        terraformProcess.StartInfo.UseShellExecute = false;
        terraformProcess.StartInfo.WorkingDirectory = Path.Combine(repoPath,"terraform");
        Console.WriteLine(terraformProcess.StartInfo.WorkingDirectory);
        terraformProcess.StartInfo.RedirectStandardOutput = true;
        terraformProcess.StartInfo.Arguments = "init";
        terraformProcess.Start();
        terraformProcess.WaitForExit();

        terraformProcess.StartInfo.Arguments =
            $"destroy --var-file=current.tfvars -auto-approve -var vcd_user={_terraformConf.vdcUsername} -var vcd_pass={CryptoServices.Decode(_terraformConf.encryptedVdcPass)} -no-color";
        terraformProcess.Start();
        var output = terraformProcess.StandardOutput.ReadToEnd();
        terraformProcess.WaitForExit();

我试过了:

var startInfo = new StartInfo {
FileName = "terraform",
WorkingDirectory = Path.Combine(repoPath,"terraform");
RedirectStandardOutput = true;
Arguments = "init";
};

然后将其分配给Process.StartInfo,但看起来Process.StartInfo上只有getter.

我只是好奇是否有一种更短的方法来做到这一点,而不是重复这么多行.

推荐答案

可以在多个级别上使用对象初始值设定项语法,即

var terraformProcess = new Process
{
    StartInfo =
    {
        FileName = "terraform",
        UseShellExecute = true,
        // etc ...
    }
};

您可以阅读有关对象和集合初始化器here的更多信息,它是一个非常方便的语法糖块

Csharp相关问答推荐

在C#中,DirectoryEntry返回空AuditRules集合,即使审计规则确实存在

未找到任何HTTP触发器.成功部署Azure Functions Project后(c#)

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

Swagger没有显示int?可以为空

异步任务调用程序集

Azure函数-在外部启动类中生成配置时出错

如何从另一个类的列表中按ID取值

EF Core 7-忽略模型绑定中的虚拟属性

FakeItEasy自动嘲弄内容

try 创建一个C#程序,该程序使用自动实现的属性、覆盖ToString()并使用子类

Linq SELECT的多条指令

如何在C# WinForm控件中使用Windows 10/11的黑暗主题?

使用C#代码和SQL SERVER中的相同证书签名会产生不同的结果

从具有泛型类型约束的类继承-Blazor

自定义ConsoleForMatter中的DI/Http上下文

修复C#Web API中的循环引用错误

C#.NET中的Parall.ForAsync?

try 在ILogger提供程序中获取appSettings.json设置

在NET7 throws中为集成测试创建WebApplication固定装置

调试时无法重现DbUpdateConcurrentException