C#-通过静态类带参数的扩展属性
我想通过类C#-通过静态类带参数的扩展属性,c#,C#,我想通过类UserState中的userId和属性IsOnline获取用户状态(在线或离线) 我的示例代码在没有第一个用户的情况下运行良好: using System; using System.Collections.Generic; namespace MyProgram { public static class User { public static Dictionary<string, string> OnlineUsers =
UserState
中的userId
和属性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");
}
}
}
}
使用系统;
使用System.Collections.Generic;
名称空间MyProgram
{
公共静态类用户
{
在线公共静态词典用户=
新字典();
公共静态void AddOnlineUser(字符串userId,字符串名称)
{
添加(userId,name);
}
}
公共静态类UserState
{
公共静态边界线
{
得到
{
返回CheckingUserOnline(UserInfo.Id);
}
设置
{
等值线=数值;
}
}
私有静态bool CheckingUserOnline(字符串用户ID)
{
var onlineUsers=User.onlineUsers;
返回onlineUsers.ContainsKey(userId);
}
}
公共类用户信息
{
公共静态字符串Id{get;set;}
公共用户信息(字符串id)
{
Id=Id;
}
}
公共类主类
{
静态void Main()
{
User.OnlineUsers.Add(“A101”,“King”);
User.OnlineUsers.Add(“A102”、“皇后”);
User.OnlineUsers.Add(“A103”,“Jack”);
字符串[]id={“A101”、“A103”、“A104”、“A105”、“A102”};
foreach(id中的字符串id)
{
var user=新用户信息(id);
字符串名称=User.OnlineUsers.ContainsKey(id)?
User.OnlineUsers[id]:“N-”+id;
字符串状态=UserState.IsOnline?“联机”:“脱机”;
Console.WriteLine(string.Format(“用户id:{0}.\n名称:{1}.\n状态:{2}”),
身份证、姓名、身份);
Console.WriteLine(“uuuuuuuuuuuuuuuuuuuuuuuu\n”);
}
}
}
}
未打印用户id:
行
以下是快照:
那是我的问题。你能告诉我怎么修吗
两个小问题是:
- 类
中的属性UserState
是否被称为IsOnline
扩展 属性
- 对象
第行user
var user=new UserInfo(id)代码>从未使用过。
我定义它是为了存储当前用户id。我认为它是
不适合创建从未使用过的变量。还有别的办法吗 将
设置为构造函数id
public UserInfo(字符串id){}
谢谢大家! 我想你在找这样的东西:
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("_______________");
}
}
}
公共类用户
{
私有静态字典_onlineUsers=新字典();
公共静态void AddOnlineUser(字符串userId,字符串名称)
{
_添加(userId,name);
}
公共静态bool IsUserOnline(字符串userId)
{
返回_onlineUsers.ContainsKey(userId);
}
公共静态字符串GetUser(字符串userId)
{
返回_onlineUsers[userId];
}
}
公共类用户信息
{
公共字符串Id{get;set;}
公共边界线
{
得到
{
返回User.IsUserOnline(this.Id);
}
}
公共用户信息(字符串id)
{
Id=Id;
}
}
班级计划
{
静态void Main(字符串[]参数)
{
用户。AddOnlineUser(“A101”,“King”);
User.AddOnlineUser(“A102”、“皇后”);
AddOnlineUser(“A103”、“Jack”);
字符串[]id={“A101”、“A103”、“A104”、“A105”、“A102”};
foreach(id中的字符串id)
{
var user=新用户信息(id);
字符串名称=User.IsUserOnline(id)?User.GetUser(id):“N-”+id;
字符串状态=user.IsOnline?“联机”:“脱机”;
WriteLine(string.Format(“用户id:{0}.\n名称:{1}.\n状态:{2}”,id,名称,状态));
Console.WriteLine(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”);
}
}
}
是否在用户id Writeline之前尝试了Console.Writeline(\n)?(如果这解决了未显示用户id的问题?(它破坏了格式,但会很有趣,因为它会指示是否存在某些显示问题或问题是否存在于其他地方。不,没有扩展属性。扩展方法是一种静态方法,使用时就像它是其他类型上的实例方法一样。在您的情况下,您根本不使用实例。fa顺便说一句,构造函数分配给静态字段的ct是一个巨大的红旗。这似乎是一个愚蠢的建议,但写线跳过字符串的一部分似乎很奇怪,所以你确定你已经将控制台视图一直向上滚动了吗?这是一个笑话吗?你只需要向上滚动一行。capt中的垂直滚动条离子不在顶端。是的,因为你的设计被破坏了,因为静电场的过度使用。