将类型字符串转换为类型对象

时间:2010-08-26 12:22:58

标签: c#

我是C#的新手。我需要在控制台应用程序中显示用户fullname,但我一直收到此错误

  

无法将类型'string'隐式转换为'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;
}

4 个答案:

答案 0 :(得分:9)

您的方法需要返回User类型的返回值,如果您希望它返回名称 - 请将其更改为:

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

或者,或者:

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

答案 1 :(得分:3)

您的代码:

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

当成功找到一个string对象时,期望返回user.FullName对象(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

从方法返回Console.WriteLine(FindUser(users, noteId)); // instead of Console.WriteLine(FinderUser(users, noteId).FullName); 时看到“UserCustomerNotes.User”输出的原因是:

UserCustomerNotes.User

因为返回类型是User并且它没有覆盖“ToString”来指定任何不同的东西,所以当Console.WriteLine要求你的Console.WriteLine("The users full name is: {0}", myUserToFind != null ? myUserToFind.FullName : "Not Found");对象提供它时给出的默认值文本等价物是它的名字。这解释了为什么您当前看到代码中的“奇数”输出。

  

注意:我已经放了foreach(var x in y) do something; ,因为如果找不到用户你的代码可以返回null,而你想要特殊情况下你在那种情况下提供的输出

这也值得一提,但与问题本身无关,格式为:

{

如果在行下方进行更改,则比在每个语句块周围明确调出}foreach (User user in users) { if (user.ID == noteid) { return user.FullName; } } return null; 时更容易“破解”:

{{1}}

答案 2 :(得分: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;
}

答案 3 :(得分:0)

您可以在ToString课程中定义User方法:

public override string ToString()
{
    return FullName;
}

然后你可以

Console.WriteLine("User name {0}", user);