列表ToString未显示正确的输出

本文关键字:输出 显示 ToString 列表 | 更新日期: 2023-09-27 18:21:42

我正在尝试将中的列表中的项转换为字符串。但每次我转换或显示它时,都会显示"TwitchIrcChar.user"。如果有人能帮上忙,那将非常有帮助。如果没有问题,我很抱歉,但我是新来的。我试过使用convert。ToString和userlist.ToString.都给出了相同的输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
namespace TwitchIrcChat
{
class User
{
    static Random random = new Random();
    public string UserName { get; set; }
    public SolidColorBrush Color { get; set; }
    public bool IsMod { get; set; }
    public User(string username)
    {
        IsMod = false;
        UserName = username;
        randomColor();
    }
    public void setColor(SolidColorBrush color)
    {
        Color = color;
    }
    private void randomColor()
    {
        var temp = Brushes.White;
        int randomColor = random.Next(0, 10);
        switch (randomColor)
        {
            case 0:
                temp = Brushes.Blue;
                break;
            case 1:
                temp = Brushes.Green;
                break;
            case 2:
                temp = Brushes.Red;
                break;
            case 3:
                temp = Brushes.Purple;
                break;
            case 4:
                temp = Brushes.Orange;
                break;
            case 5:
                temp = Brushes.Yellow;
                break;
            case 6:
                temp = Brushes.Gold;
                break;
            case 7:
                temp = Brushes.Teal;
                break;
            case 8:
                temp = Brushes.Cyan;
                break;
            case 9:
                temp = Brushes.LightBlue;
                break;
            case 10:
                temp = Brushes.Pink;
                break;
        }
        Color = temp;
    }
}
class UserList
{
    public moderation q = new moderation();
    public List<User> userList { get; set; }
    public UserList()
    {
        userList = new List<User>();
    }
    public void Add(string userName)
    {
        bool isInList = false;
        foreach (var item in userList)
        {
            if (item.UserName.Equals(userName))
            {
                isInList = true;
                break;
            }
        }
        if (!isInList)
        {
            var tempUser = new User(userName);
            userList.Add(tempUser);
        }
    }
    public void Remove(string userName)
    {
        int userLocation = -1;
        for (int i = 0; i < userList.Count; i++)
        {
            if (userName.Equals(userList[i].UserName))
            {
                userLocation = i;
                break;
            }
        }
        try
        {
            userList.RemoveAt(userLocation);
        }
        catch (Exception)
        {
        }
    }
    public SolidColorBrush getColor(string username)
    {
        var temp = Brushes.White;
        foreach (var item in userList)
        {
            if (item.UserName.Equals(username))
            {
                temp = item.Color;
            }
        }
        return temp;
    }
    public void setColor(string username, string color)
    {
        if (userList.Count(s => s.UserName == username) == 0)
        {
            Add(username);
        }
        var user = userList.First(s => s.UserName == username);
        var converter = new BrushConverter();
        var brush = (SolidColorBrush)converter.ConvertFromString(color);
        user.Color = brush;
    }
    public void Clear()
    {
        userList.Clear();
    }
    public void list()
    {
        Console.WriteLine("qweqweqweqwe");
        for (int i = 0; i < userList.Count; i++) // Loop through List with for
        {
            Console.WriteLine(userList[i].ToString());
            Console.WriteLine("qweqweqweqwe");
        }
    }
    public void AddMod(string userName)
    {
        foreach (var item in userList)
        {
           //string a = item.ToString();
           //q.writeToFile(a);
            if (item.UserName.Equals(userName))
            {
                item.IsMod = true;
            }
        }
    }
}
}

列表ToString未显示正确的输出

您可以像其他人建议的那样覆盖ToString,或者如果UserName就是您想要做的全部。

Console.WriteLine(userList[i].UserName.ToString());

Console.WriteLine(userList[i].UserName);

因为它已经是一个字符串

您必须重写类中的ToString()方法,并在该方法中返回所需的字符串。例如,如果您想在User实例上调用ToString()时返回UserName,您可以这样做:

public class User 
{
   public string UserName {get;set;}
   public override string ToString()
   {
        return UserName;
   }
}

如果不执行此操作,默认的ToString()将返回对象类型的名称。

这与列表无关,而是与如何将自定义对象表示为字符串有关。

.ToString()的默认行为正是您所看到的,输出类的名称。当你想把一个对象看作字符串时,NET无法直观地知道你的意思。您需要通过重写对象上的.ToString()来显式地提供该逻辑。

例如,如果你只想查看用户名,它可以是简单的东西:

public override string ToString()
{
    return UserName;
}

本质上,你需要问自己的问题是,"我是在输出用户的属性,还是在输出用户本身?"如果是后者,你肯定想将该逻辑封装到.ToString()覆盖中,因为该逻辑可能会随着时间的推移而变化。例如,如果您希望User的字符串表示也显示User是否为"mod"(例如,具有*字符),则只需将其添加到override:

public override string ToString()
{
    return string.Format("{0} {1}",
        UserName,
        IsMod ? "(*)" : string.Empty);
}

ToString()(继承自System.Object)的默认行为是显示类型名称。如果要更改此行为,必须覆盖ToString:

class User
{
    ...
    public override string ToString()
    {
        return UserName + (IsMod ? " (moderator)" : "");
    }
}

ToString是由Console.WriteLine自动使用的,所以你可以这样称呼它:

Console.WriteLine(userList[i]);

例如,您也可以直接将对象添加到列表框中,因为这些列表框也使用ToString来显示项目。

listBox1.Items.Add(user);
相关文章: