使用此行代码时,在taskArray [i] = animalList [i]。((Animal)animalObj).ToString();的行上的“。”之前收到错误消息“ Indentifier Expected”。 ((动物)。此方法应该根据用户输入的内容使用ToString方法,因为可以调用多个子类。动物:哺乳动物和动物:昆虫是我目前拥有的,我需要能够使用ToString取决于我在Animal animalObj内部发送的内容。
如果还有其他方法可以让程序知道我希望它调用哪个ToString方法,那么仅使用.ToString()即可正常工作并执行idk。
public string ListToStringArray(int x, Animal animalObj)
{
string[] taskArray = new string[Count];// makes another array the size of the list
for (int i = 0; i < Count; i++) //does a loop equal to the amonut of items in the list
{
taskArray[i] = animalList[i].((Animal)animalObj).ToString(); //puts the values inside the list into the array
}
return taskArray[x]; //returns the array number which the method calls
}
答案 0 :(得分:3)
是的,语法不正确,您要使用:
taskArray[i] = animalList[i].ToString();
是的,但是我在项目中有多个
ToString()
方法。怎么样 程序会知道使用哪个吗?
您已评论animalList
是List<Animal>
。因此,这将调用此列表中实际类中覆盖的ToString
。例如,如果您有以下动物:
abstract class Animal
{
public override string ToString()
{
return "I'm just an animal, no idea what i am actually";
}
}
class Lion : Animal
{
public override string ToString()
{
return "ROAR!!!";
}
}
class Giraffe : Animal
{
public override string ToString()
{
return "[Donno what noise a giraffe makes]";
}
}
class Meerkat: Animal
{
// no ToString
}
然后输入以下代码
var animalsList = new List<Animal> {new Lion(), new Giraffe(), new Meerkat()};
animalsList.ForEach(a => Console.WriteLine(a.ToString()));
输出
ROAR!!!
[Donno what noise a giraffe makes]
I'm just an animal, no idea what i am actually
您会看到,即使列表被声明为ToString
,也总是会调用被覆盖的List<Animal>
。这就是继承在C#中的工作方式。
如果不覆盖它,您将从System.Object
中获得一个,它仅返回该对象类型的完全限定名称。
答案 1 :(得分:0)
animalList[i].((Animal)animalObj).ToString();
在animalList [i]之后是无效的语法。您只能放置方法,字段或属性。喜欢:
animalList[i].ToString();
或:
animalList[i].Name;
以此类推。