2010-08-26 128 views
3

我是C#的新手。我需要出示用户在控制台应用程序全名,但我不断收到此错误将类型字符串转换为类型对象

不能键入“串”隐式转换为“UserCustomerNotes.User”

我的代码工作时,我只用return user,但它在应用程序中显示的所有内容都是“UserCustomerNotes.User”,我需要显示用户的全名。任何人都可以请帮忙。这里是我的代码:

public static User FindUser(User[] users, int noteid) 
{ 
    foreach (User user in users)     
     if (user.ID == noteid) return user.FullName; 
    return null; 
} 

回答

3

您的代码:

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

外加这个答案的质量! +1 – AlfredBr 2010-08-26 12:50:51

+0

@AlfredBr,谢谢=)这是很长的啰嗦,但我想尝试打开OPs问题的每一点(包括Console.WriteLine输出“奇怪”),似乎有一点点被带走...; =) – Rob 2010-08-26 12:51:58

+0

谢谢!帮助很多!!! – CSharpSuzie 2010-08-27 06:06:55

9

你的方法excpecting typeUser的返回值,如果你想让它返回的名字 - 它更改为:

public static **string** FindUser(User[] users, int noteid) 

,或者:

if (user.ID == noteid) return user; 
1

这是因为你的函数是User类型。尝试将其更改为string

public static string FindUser(User[] users, int noteid) 
{  
    foreach (User user in users)     
     if (user.ID == noteid) return user.FullName; 
    return null; 
} 
+0

从API的角度来看,它有一个缺点(是的,nitpicking略微!=),它有一个名为'FindUser'的方法,该方法返回一个用户'FullName',而不是'User' ...如果OP准备做这将重新命名方法FindUsersFullName更有意义 – Rob 2010-08-26 12:37:25

0

您可以定义ToString方法您User类中:

public override string ToString() 
{ 
    return FullName; 
} 

那么你可以

Console.WriteLine("User name {0}", user); 
相关问题