Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-通过静态类带参数的扩展属性_C# - Fatal编程技术网

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”);
}
}
}
  • 扩展属性在C#中不存在
  • 我曾经为你做过=P
  • 可能第一行没有出现的最好原因是:屏幕上的信息太多。尝试最大化控制台窗口,并将滚动条放在最开始处

  • 是否在用户id Writeline之前尝试了Console.Writeline(\n)?(如果这解决了未显示用户id的问题?(它破坏了格式,但会很有趣,因为它会指示是否存在某些显示问题或问题是否存在于其他地方。不,没有扩展属性。扩展方法是一种静态方法,使用时就像它是其他类型上的实例方法一样。在您的情况下,您根本不使用实例。fa顺便说一句,构造函数分配给静态字段的ct是一个巨大的红旗。这似乎是一个愚蠢的建议,但写线跳过字符串的一部分似乎很奇怪,所以你确定你已经将控制台视图一直向上滚动了吗?这是一个笑话吗?你只需要向上滚动一行。capt中的垂直滚动条离子不在顶端。是的,因为你的设计被破坏了,因为静电场的过度使用。