簡體   English   中英

C#檢查您是否已通過參數

[英]C# check if you have passed arguments or not

我有這個代碼:

public static void Main(string[] args)
{         
    if (string.IsNullOrEmpty(args[0]))  // Warning : Index was out of the bounds of the array
    {
        ComputeNoParam cptern = new ComputeNoParam();
        cptern.ComputeWithoutParameters();
    }
    else
    {
        ComputeParam cpter = new ComputeParam();
        foreach (string s in args){...}
    }
}

也試過if(args.Length==0) ,但它仍然不起作用。

基本上我想知道用戶是否使用參數調用程序。 如果不是,程序將要求輸入。

我怎樣才能做到這一點? 提前致謝。

if(args.Length==0)應該有效, args[0]至少需要一個參數才能崩潰。

if(args == null || args.Length == 0)
{
    // no arguments
}
else
{
    // arguments
}

它是一個數組,並且有兩個場景可能具有傳遞NO參數的含義。 取決於您的語義

args == nullargs.Length == 0

在這種情況下,在執行程序時調用該方法(例如,不將該方法作為單元測試的一部分調用),args參數將永遠不會為空(使第一個測試變為冗余)我已將其包含在內以保證完整性,因為在除main之外的其他方法中可能容易遇到相同的情況

如果按順序測試它們,則不必擔心后一個表達式中的args為null

if(args == null || args.Length == 0){
    ComputeNoParam cptern = new ComputeNoParam();
    cptern.ComputeWithoutParameters();
}
else
{
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}

這應該也有效:

if (args.Length < 1)
{
    //no args passed
}

這應該適用於您的場景:

if (args == null || args.Length == 0)
{
    //Code when no arguments are supplied
}
else
{
    //Code when arguments are supplied
}

注意在使用||時,如何在args.Length == 0之前執行check args == null 要么 &&。 這被稱為“條件短路”,其中C#將開始評估第一個條件,如果它是真的,則不會查看第二個條件。 在這種情況下,只有在第一個條件為假時,C#才會評估第二個條件。

假設你的條件如果對齊if(args.Length == 0 || args == null)並且args變為null,它將在第一個條件上拋出異常,盡管第二個條件為真。

在放置條件時我們需要記住這一點。

如果您已經在使用System.Linq另一個可用選項是使用Any()擴展名,例如:

public static void Main(string[] args)
{
    if (args == null && !args.Any())
    {
        // No parameters passed.
        ComputeNoParam cptern = new ComputeNoParam();
        cptern.ComputeWithoutParameters();

        return;
    }

    // process parameters
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}

這也可以寫成:

public static void Main(string[] args)
{
    if (!args?.Any() ?? true)
    {
        // No parameters passed.
        ComputeNoParam cptern = new ComputeNoParam();
        cptern.ComputeWithoutParameters();

        return;
    }

    // process parameters
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}

這只是顯示了另一個可用的選項,我同意使用.Length ,雖然我會刪除空檢查並使用條件訪問,所以。

if (args?.Length == 0) {
    // Code hit if args is null or zero
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM