Farklı biçimlerde komut satırı argümanları Ayrıştırma

oy
0

Farklı biçimlere komut satırı argümanları dönüştürmek çalışıyorum. Ben belirli bir kullanıcıyı almaya çalışıyorum Örneğin, olurdu GetUser=UserName, ama aynı zamanda gibi eşittir işareti, gerekmez yöntemleri var GetAllUsers. Şu anda şu anda bölme değilim =ama tüm komutlar için bunu yapmak gerekmez. Ben eğer şartlı, bunu ayarı çalıştı =aksi takdirde sadece bir dize olarak argüman alacak algılanırsa, bu bölünmüş olacak, ama alıyorumCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Kod:

 public static Dictionary<string, string> ParseArgs(string[] args)
        {
            Dictionary<string, string> results = new Dictionary<string, string>();
            foreach (string arg in args)
            {
                string[] parts = arg.Split('=');
                if (parts.Length > 1)
                {
                    results[parts[0]] = parts[1];
                    continue;
                }
                else
                {
                    results = Convert.ToString(arg);
                }

            }
            return results;
        }

Oluştur 13/01/2020 saat 21:52
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Sen bir sözlük nesneye bir dize atamak çalışıyoruz. Eğer (Sözlükte gibi) bir koleksiyon istiyorsanız o zaman şöyle Add yöntemi kullanmalısınız:

    foreach (string arg in args)
    {
        string[] parts = arg.Split('=');
        if (parts.Length > 1)
        {
            //results[parts[0]] = parts[1];
            results.Add(parts[0], parts[1]);
            continue;
        }
        else
        {
            results.Add("GetUser", arg);
        }

    }

Burada değer olarak "GetUser" olmasını zorunlu, ama aslında farklı bir şey isteyebilir. Kişisel Sözlük Anahtar-Değer çiftleri kullanıyorsa ve sonuçları [ "GetUser"] "GetUser" için bir dize döndürmek için söyleyebilirim. Ayrıca kullanabilirsiniz TryGetValue GetUser aslında sağlandı olduğunu doğrulamak için.

Sadece GetUser (örn kullanıcı adı) peşinde dize dönmek istiyorsanız Ayrıca, o zaman bir dizeye sonuçlarını değiştirebilecek ve sadece doğrudan bu atamak ve numune için overkill görünüyor Sözlük, (belki gerçek bütün kullanımını atlamak proje çok daha) gerçi karmaşıktır.

Cevap 13/01/2020 saat 22:17
kaynak kullanıcı

oy
0

Başka bir parçası olarak, özetinden sözlüğe atama dizeye çalışıyoruz results = Convert.ToString(arg);

Yani, aşağıda gösterildiği gibi böyle bir şeyle başka parçasını değiştirin:

public static Dictionary<string, string> ParseArgs(string[] args)
{
     Dictionary<string, string> results = new Dictionary<string, string>();
     foreach (string arg in args)
     {
          string[] parts = arg.Split('=');
          if (parts.Length > 1)
          {
               results[parts[0]] = parts[1];
               // continue; no need to use continue, as there are no more statements after this if-else, loop will anyway continue. but please uncomment if you have any in your actual code.
          }
          else
          {
               results[arg] = arg; // assuming arg string in args won't repeat, meaning its unique. Otherwise please use ContaineKey if condition before adding or over-writing.
           }
     }
     return results;
}
Cevap 13/01/2020 saat 22:49
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more