我正在玩控制台的返回值,我看到了一些有趣的东西。有什么不同之处:
static void Main(string[] args)
{
Environment.ExitCode = 4;
}
和
static int Main(string[] args)
{
return 10;
}
如果我同时使用两者:
static int Main(string[] args)
{
Environment.ExitCode = 4;
return 10;
}
然后退出代码:
在命令行中它总是:10,
在视觉工作室它是:4,
从视觉工作室与残疾人主持过程是:10。
问题:
这两种设置退出代码的方法有哪些不同,哪种方法被认为是最有用的?
答案 0 :(得分:1)
Environment.ExitCode
州的文档:
如果Main方法返回void,则可以使用此属性来设置 退出代码将返回到调用环境。如果主要 如果不返回void,则忽略此属性。的初始值 这个属性为零。
因此,在您的情况下,您的<?php foreach(): ?> ------ // for each i_id
<?php if(obj == 'obj_1'): ?> // WE NEED obj_1 VALUES FOR CHOICE BOLD COLOR
<?php if(value_1 > value_2): ?>
<?php $name_1_BOLD = "style='color: black;'" ?>
<?php else: ?>
<?php $name_2_BOLD = "style='color: black;'" ?>
<?php endif; ?>
<?php endif; ?>
<div <?php echo $name_1_BOLD; ?>> // ------ here can be bold color
<?php echo $name_1; ?> --------- // here pass NAME 1
</div>
<div>
<?php foreach(): ?> // ------ all values for each i_id
<div>
<?php echo $value_1.' - '.$value_2; ?> // here pass ALL VALUES FOR unique i_id
</div>
<?php endforeach; ?>
</div>
<div <?php echo $name_2_BOLD; ?>> // ------ here can be bold color
<?php echo $name_2; ?> --------- // here pass NAME 2
</div>
会返回main
,这意味着int
不应该被使用(文档说明它将被忽略)。如果您的Environment.ExitCode
返回main
,而void
似乎会按预期行事。
当您使用Environment.ExitCode
Environment.ExitCode
方法时,使用调试器运行时可能会产生奇怪的结果?
答案 1 :(得分:1)
为了回应&#34; vshost.exe&#34;在这种情况下。
vshost.exe
进程使用Assembly.ExecuteAssembly()
启动原始可执行文件,而ExecuteAssembly
依次是documented到&#34;程序集入口点返回的值。&#34;
但是,vshost.exe可执行文件的(生成的)Main方法并不返回int,而是void。也就是说,它会忽略 class VsHost
{
public static int Main(string[] args) {
// ...
return appDomain.ExecuteAssembly("true.exe", ...);
}
}
返回的值。
例如,它看起来不像/概念上那样:
class VsHost
{
public static void Main(string[] args) {
// ...
appDomain.ExecuteAssembly("true.exe", ...);
// Nothing here...
}
}
但看起来像这样:
Environment.ExitCode
因此,基本上,当它退出时,唯一设置的退出代码是由ExitCode
在&#34;真实&#34;中提供的退出代码。可执行文件。请注意, // Compile to "Example3.exe"
using System;
class Example3
{
public static int Main(string[] args) {
Environment.ExitCode = 4;
return 5;
}
}
// Complile to "VsHostMock.exe"
using System;
class VsHostMock
{
public static void Main(string[] args) {
var appDomain = AppDomain.CreateDomain("other");
int returnCode = appDomain.ExecuteAssembly("Example3.exe");
Console.WriteLine("ReturnCode: {0}", returnCode);
Console.WriteLine("Environment.ExitCode: {0}", Environment.ExitCode);
}
}
是全局值,与其设置的AppDomain无关。
您可以使用第三个示例和以下&#34; vshost-mock&#34;轻松测试此行为:
C:\> VsHostMock.exe ; echo %ERRORLEVEL%
ReturnCode: 5
Environment.ExitCode: 4
然后运行以下命令:
C:\> echo %ERRORLEVEL%
4
然后运行:
string time="9.30 pm";
TimeSpan ts = DateTime.ParseExact(time, "h.mm tt", CultureInfo.InvariantCulture).TimeOfDay;
db.time = Timespan.Parse(ts);
context.modal.Add(db);
context.SaveChanges();
答案 2 :(得分:0)
根据微软的说法:
如果Main方法返回void,则可以使用此属性来设置 退出代码将返回到调用环境。如果主要 如果不返回void,则忽略此属性。的初始值 这个属性为零。
参考https://msdn.microsoft.com/en-us/library/system.environment.exitcode%28v=vs.110%29.aspx。
我个人更喜欢使用return
中的Main
,但我想像往常一样,选择完全取决于你。