list.ToString没有显示正确的输出

时间:2014-09-11 15:27:42

标签: c#

我正在尝试将列表中的项目转换为字符串。但每次我转换它或显示它所有的节目都是" TwitchIrcChar.user"。如果有人可以帮助解决这个问题,那将非常有帮助。对不起,如果noob问题,但我是新的列表。香港专业教育学院尝试使用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;
            }
        }
    }

}
}

4 个答案:

答案 0 :(得分:3)

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

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

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

因为它已经是一个字符串

答案 1 :(得分:2)

这与列表无关,而与将自定义对象表示为字符串的方式有关。

.ToString()的默认行为正是您所看到的,输出了该类的名称。当您想要将对象视为字符串时,.NET无法直观地了解您的意思。您需要在对象上通过overriding .ToString()明确提供该逻辑。

例如,如果您只想查看用户的姓名,可能会有以下简单内容:

public override string ToString()
{
    return UserName;
}

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

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

答案 2 :(得分:2)

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

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

如果不这样做,默认的ToString()将返回对象类型的名称。

答案 3 :(得分:1)

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

class User
{
    ...

    public override string ToString()
    {
        return UserName + (IsMod ? " (moderator)" : "");
    }
}
{p> ToStringConsole.WriteLine自动使用,因此您只需将其称为:

Console.WriteLine(userList[i]);

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

listBox1.Items.Add(user);