你的代码:
public static User FindUser(User[] users, int noteid)
{
foreach (User user in users)
if (user.ID == noteid) return user.FullName;
return null;
}
希望在成功找到
user.FullName
值时,返回一个
string
对象,而您所声明的方法的返回类型是
User
。您应该这样做(在当前调用
FindUser
的位置):
var ArrayOfUsersToSearch = GetAnArrayOfUserFromSomewhere();
var noteId = 3; // Or whatever value you want to use
var myUserToFind = FindUser(ArrayOfUsersToSearch, noteId);
Console.WriteLine("The users full name is: {0}",
myUserToFind != null ? myUserToFind.FullName : "Not Found");
并将您的FindUser
方法中的代码更改为:
public static User FindUser(User[] users, int noteid)
{
foreach (User user in users)
if (user.ID == noteid) return user;
return null;
}
你在返回方法中的
user
时,看到了“UserCustomerNotes.User”的输出,原因如下:
Console.WriteLine(FindUser(users, noteId));
// instead of
Console.WriteLine(FinderUser(users, noteId).FullName);
由于返回类型为
UserCustomerNotes.User
,并且它没有覆盖“ToString”以指定任何不同的内容,因此当 Console.WriteLine 要求您的
User
对象提供其文本等效项时,给出的默认值是其名称。这就解释了为令人困惑的输出结果。
注意:我已经将 Console.WriteLine("The users full name is: {0}", myUserToFind != null ? myUserToFind.FullName : "Not Found");
放在你的代码中,因为如果无法找到用户,则您的代码可能会返回 null,并且您需要特殊处理提供的输出。
另外值得一提的是,虽然与问题本身无关,但格式如下:
foreach(var x in y)
do something;
如果在下一行进行更改,那么如果您没有明确调用每个语句块周围的{
和}
,则更容易出现“破损”:
foreach (User user in users)
{
if (user.ID == noteid)
{
return user.FullName;
}
}
return null;