我希望通过userId
在UserState
的{{1}}属性IsOnline
获取用户状态(在线或离线)。
我的示例代码在没有第一个用户的情况下正常工作:
using System;
using System.Collections.Generic;
namespace MyProgram
{
public static class User
{
public static Dictionary<string, string> OnlineUsers =
new Dictionary<string, string>();
public static void AddOnlineUser(string userId, string name)
{
OnlineUsers.Add(userId, name);
}
}
public static class UserState
{
public static bool IsOnline
{
get
{
return CheckingUserOnline(UserInfo.Id);
}
set
{
IsOnline = value;
}
}
private static bool CheckingUserOnline(string userId)
{
var onlineUsers = User.OnlineUsers;
return onlineUsers.ContainsKey(userId);
}
}
public class UserInfo
{
public static string Id { get; set; }
public UserInfo(string id)
{
Id = id;
}
}
public class MainClass
{
static void Main()
{
User.OnlineUsers.Add("A101", "King");
User.OnlineUsers.Add("A102", "Queen");
User.OnlineUsers.Add("A103", "Jack");
string[] ids = { "A101", "A103", "A104", "A105", "A102" };
foreach (string id in ids)
{
var user = new UserInfo(id);
string name = User.OnlineUsers.ContainsKey(id) ?
User.OnlineUsers[id] : "N-" + id;
string status = UserState.IsOnline ? "Online" : "Offline";
Console.WriteLine(string.Format("User id: {0}.\nName: {1}.\nStatus: {2}",
id, name, status));
Console.WriteLine("_______________\n");
}
}
}
}
没有打印User id:
行。
以下是快照:
这是我的问题。你能帮我解决一下吗?
还有两个小问题:
班级IsOnline
中的媒体资源UserState
是否为extension
property
?
从不使用第user
行中的对象var user = new UserInfo(id);
我已经定义它以存储当前用户ID。我想是的
不适合创建一个从未使用过的变量。还有另一种方法吗?
将id
设置为构造函数public UserInfo(string id){}
?
谢谢!
答案 0 :(得分:0)
我认为你正在寻找这样的东西:
public class User
{
private static Dictionary<string, string> _onlineUsers = new Dictionary<string, string>();
public static void AddOnlineUser(string userId, string name)
{
_onlineUsers.Add(userId, name);
}
public static bool IsUserOnline(string userId)
{
return _onlineUsers.ContainsKey(userId);
}
public static string GetUser(string userId)
{
return _onlineUsers[userId];
}
}
public class UserInfo
{
public string Id { get; set; }
public bool IsOnline
{
get
{
return User.IsUserOnline(this.Id);
}
}
public UserInfo(string id)
{
Id = id;
}
}
class Program
{
static void Main(string[] args)
{
User.AddOnlineUser("A101", "King");
User.AddOnlineUser("A102", "Queen");
User.AddOnlineUser("A103", "Jack");
string[] ids = { "A101", "A103", "A104", "A105", "A102" };
foreach (string id in ids)
{
var user = new UserInfo(id);
string name = User.IsUserOnline(id) ? User.GetUser(id) : "N-" + id;
string status = user.IsOnline ? "Online" : "Offline";
Console.WriteLine(string.Format("User id: {0}.\nName: {1}.\nStatus: {2}", id, name, status));
Console.WriteLine("_______________");
}
}
}