-1

以下のように動作するようにしようとしています。name(something) は何かをリストに追加します。そして name() が値を取得します。しかし、私はいくつかの問題を抱えており、あなたの誰かが何が起きているかを知っていることを望んでいました.

public class PlayerSettings
{
    public List<string[]> Players = new List<string[]>();
    public void Name(string input)
    {
        string[] addname = new string[1];
        addname[0] = input;
        Players.Add(addname);
    }
    public string[] Name()
    {
        foreach (string[] Player in Players)
        {
            return Player[0];
        }
    }
}

以下の行で、タイプ string を string[] に暗黙的に変換できませんというエラーが表示されます。

return Player[0];
4

9 に答える 9

1

Name() がカンマ区切りの文字列などの累積値を返すようにする場合は、次のようにします。

   public string Name()    {  return string.Join("," Players.Select(p=>p[0]));    }

最初の値をすべて含むリストを返す必要がある場合:

   public string[] Name()    {  return Players.Select(p=>p[0]).ToArray();    }
于 2012-07-09T08:30:10.313 に答える
1

このコードは、あなたが求めたことを行います:

public class PlayerSettings
{
    public List<string> Players = new List<string>();
    public void Name(string input)
    {
        Players.Add(input);
    }

    public IEnumerable<string> Name()
    {
        return Players;
    }
}

しかし、それはあなたが望むものではないことは確かです。

コードに実際に実行させたいこと、具体的にはコードに がある理由を考えてList<string[]>ください。

于 2012-07-09T08:31:07.313 に答える
1

配列ではなく配列の要素を返す場合は、に置き換えpublic string[] Name()ますpublic string Name()

または、1つのアイテムを使用した配列が必要な場合Array.Resize(*params*)

于 2012-07-09T08:28:39.060 に答える
1

次のようなものを試すことができます

public class PlayerSettings
{
    public List<String> Players = new List<String>();
    public void Name(String input)
    {
        Players.Add(input);
    }
    public IEnumerable<String> Names()
    {
        foreach (string Player in Players)
        {
            yield return Player;
        }
    }
}
于 2012-07-09T08:29:23.100 に答える
0

文字列の配列を返す場合は、Player[0] ではなく Player を返す必要があります。

于 2012-07-09T08:29:05.723 に答える
0

Player[0]は 1 つだけstringです。

しかし、あなたのメソッド定義は、文字列の配列を返すと言っています ( string[])

だから、ただ戻るPlayers.ToArray()か何か。

于 2012-07-09T08:29:27.863 に答える
0

returnメソッドから複数回実行することはできません。内部リストが文字列の配列のリストである理由がわかりません。次のようなものが欲しいと思います:

public class PlayerSettings
{
    public List<string> Players = new List<string>();
    public void Name(string input)
    {
        Players.Add(input);
    }
    public string[] Name()
    {
        return Players.ToArray();
    }
}
于 2012-07-09T08:29:40.573 に答える
0

まずPlayer[0]、タイプstring[]ではなく、単なる文字列です。したがって、2 番目の戻り値の型はand notName()である必要があります。stringstring[]

また、単一の文字列を挿入して同じ文字列を取得するだけstring[]なので、 a の中で aを使用する意味がわかりません!List<>

この修正されたコードはあなたにとって良いと思います:

public class PlayerSettings
{
    public List<string> Players = new List<string>();
    public void Name(string input)
    {
        Players.Add(input);
    }
    public string Name()
    {
       return Players.ElementAt(0);
    }
}

の最初のオーバーロードName()はリストに文字列を追加し、2 番目は追加された最初の文字列を返します。Name()次のようなインデックスに基づいて別のものを返すこともできます。

 public string Name(int index)
    {
        if (index >= 0 && index < Players.Count())
            return Players.ElementAt(index);
        else
            return null;
    }
于 2012-07-09T08:41:10.877 に答える
0

次のように playersettings クラスを記述できます。

public class PlayerSettings
{
    private List<string[]> Players = new List<string[]>();
    public void Name(string input)
    {`enter code here`
        string[] addname = new string[1];
        addname[0] = input;
        Players.Add(addname);
    }
    public string[] Name()
    {
        List<string> result = new List<string>();
        foreach (string[] Player in Players)
        {
            result.AddRange(Player);
        }
        return result.ToArray();
    }
}
于 2012-07-09T08:41:12.033 に答える