您的代码:
public static User FindUser(User[] users, int noteid)
{
foreach (User user in users)
if (user.ID == noteid) return user.FullName;
return null;
}
I当它成功找到一个对象时(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;
}
你看到的原因“UserCustomerNotes.User”输出当你从你的方法返回user
是这样的:
Console.WriteLine(FindUser(users, noteId));
// instead of
Console.WriteLine(FinderUser(users, noteId).FullName);
,因为返回类型为UserCustomerNotes.User
和我t没有覆盖“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;
来源
2010-08-26 12:27:01
Rob
外加这个答案的质量! +1 – AlfredBr 2010-08-26 12:50:51
@AlfredBr,谢谢=)这是很长的啰嗦,但我想尝试打开OPs问题的每一点(包括Console.WriteLine输出“奇怪”),似乎有一点点被带走...; =) – Rob 2010-08-26 12:51:58
谢谢!帮助很多!!! – CSharpSuzie 2010-08-27 06:06:55