首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将类型字符串转换为类型对象

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

Stack Overflow用户
提问于 2010-08-26 12:22:57
回答 4查看 2.2K关注 0票数 3

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

不能隐式地将类型'string‘转换为'UserCustomerNotes.User’

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

代码语言:javascript
复制
public static User FindUser(User[] users, int noteid)
{
    foreach (User user in users)                
        if (user.ID == noteid) return user.FullName;
    return null;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-26 12:27:01

你的代码:

代码语言:javascript
复制
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 )

代码语言:javascript
复制
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方法中的代码更改为:

代码语言:javascript
复制
public static User FindUser(User[] users, int noteid)
{       
    foreach (User user in users)                
        if (user.ID == noteid) return user;
    return null;
}

从方法返回UserCustomerNotes.User时看到“user”输出的原因如下:

代码语言:javascript
复制
Console.WriteLine(FindUser(users, noteId));

// instead of

Console.WriteLine(FinderUser(users, noteId).FullName);

因为返回类型是UserCustomerNotes.User,并且它没有覆盖"ToString“来指定任何不同的内容,所以当Console.WriteLine请求User对象的文本等效时,它的默认值是它的名称。这就解释了为什么您当前看到代码中的“奇怪”输出。

Note:我已经将Console.WriteLine("The users full name is: {0}", myUserToFind != null ? myUserToFind.FullName : "Not Found");放在了代码中,因为如果它找不到用户,那么它可以返回null,并且您希望在这种情况下对所提供的输出进行特殊处理。

同样值得一提的是,这种格式与问题本身无关:

代码语言:javascript
复制
foreach(var x in y)
    do something;

如果更深入地进行更改,则可能更容易“破坏”,而不是在每个语句块周围显式地调用{}

代码语言:javascript
复制
foreach (User user in users)                
{
    if (user.ID == noteid) 
    {
        return user.FullName;
    }
}
return null;
票数 3
EN

Stack Overflow用户

发布于 2010-08-26 12:24:32

方法删除返回值typeUser,如果希望它返回名称-将其更改为:

代码语言:javascript
复制
public static **string** FindUser(User[] users, int noteid)

或者,另一种选择是:

代码语言:javascript
复制
if (user.ID == noteid) return user;
票数 9
EN

Stack Overflow用户

发布于 2010-08-26 12:27:11

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

代码语言:javascript
复制
public static string FindUser(User[] users, int noteid)
{       
    foreach (User user in users)                
        if (user.ID == noteid) return user.FullName;
    return null;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3574987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档