2012-07-09 78 views
-1

我试图让下面的工作如下。名称(某物)向列表添加了一些东西。然后name()检索值。但我遇到了一些问题,希望你们中的一位知道发生了什么事。C#方法重载问题,字符串字符串[]转换

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]; 
     } 
    } 
} 

不能将类型字符串隐式转换为下面一行中的字符串[]错误。

return Player[0]; 
+6

什么问题..? – Misam 2012-07-09 08:24:57

+0

你想在方法Name中返回什么?尽管要修复错误,您需要“返回新的字符串[] {Player [0]};”,但这段代码没有意义。 – 2012-07-09 08:27:09

+3

你需要告诉我们你有什么问题(除了怪异的数组迷惑 - 我没有看到数组出现在这个代码中的原因) – 2012-07-09 08:27:21

回答

0

首先Player[0]不属于string[]类型,它只是一个字符串。因此,第二个Name()的返回类型应该是string而不是string[]

此外,我没有看到在List<>内部使用string[]这一点,因为您只是插入一个字符串并检索相同的字符!

我觉得这个修改后的代码应该是对你有好处:

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()第一个重载将字符串添加到列表中,而第二次返回添加的第一个字符串。你也可以有另一种Name()基于像索引返回:

public string Name(int index) 
    { 
     if (index >= 0 && index < Players.Count()) 
      return Players.ElementAt(index); 
     else 
      return null; 
    } 
+0

谢谢你这是我正在寻找的东西,除了当我要求Name()时我想将所有的值连接在一起,但我相信我可以自己做到这一点。 – user1511385 2012-07-09 08:46:10

+0

你应该接受最好的答案之一。最能帮助你理解的一个。 – naqvitalha 2012-07-09 09:02:43

+0

完成,谢谢你。 – user1511385 2012-07-09 09:06:38

1

返回数组的元素,但不是阵列,取代public string[] Name()public string Name()

,或者如果你需要数组一个项目使用Array.Resize(*params*)

0

你需要返回播放器不播放器[0]如果你愿意返回字符串数组。

+0

很明显,他想要返回一个名称数组,而不是一组播放器设置。 – ANeves 2012-07-09 08:32:03

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; 
     } 
    } 
} 
0

Player[0]只是一个string

但是你的方法定义说你是返回字符串(string[])的阵列

所以才返回Players.ToArray()什么的。

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(); 
    } 
} 
1

如果你的意思是你想名称()返回一个累计值,如逗号分隔的字符串:

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

如果它应该返回所有列表第一个值:

public string[] Name() { return Players.Select(p=>p[0]).ToArray(); } 
+0

+1作为创意名称。同样,事实证明,你心灵感应得出,OP想要加入的价值。 (他在对naqvitalha的回答发表评论时这样说)。 – 2012-07-09 11:05:55

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[]>

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(); 
    } 
}