如何编写一个类,(像数组)可以用' arr[key] '索引

本文关键字:索引 arr key 数组 何编写 一个 | 更新日期: 2023-09-27 18:03:35

就像我们做Session.Add("LoginUserId", 123);一样然后我们可以访问Session["LoginUserId"],像一个数组,我们如何实现它?

如何编写一个类,(像数组)可以用' arr[key] '索引

你需要一个索引器:

public Thing this[string index]
{
    get
    {
         // get the item for that index.
         return YourGetItemMethod(index)
    }
    set
    {
        // set the item for this index. value will be of type Thing.
        YourAddItemMethod(index, value)
    }
}

这将允许你像使用数组一样使用你的类对象:

MyClass cl = new MyClass();
cl["hello"] = anotherObject;
// etc.

如果你需要更多的帮助,这里还有一个教程。

附录:

您提到您希望在静态类上可用。这有点复杂,因为你不能使用静态索引器。如果您想使用索引器,则需要从静态字段或类似的巫术中访问它。

你应该使用索引器请看链接:http://msdn.microsoft.com/en-us/library/2549tw02.aspx

听起来你只需要一本通用字典。

var session = new Dictionary<string, object>();
//set value
session.Add("key", value);
//get value
var value = session["key"] as string;

如果你想把这个变成静态,只要把它变成另一个类中的静态成员。

public static class SharedStorage
{
   private static Dictionary<string, object> _data = new Dictionary<string,object>();
   public static Dictionary<string, object> Data { get { return _data; } }
}

那么你可以这样访问它,而不必初始化它:

SharedStorage.Data.Add("someKey", "someValue");
string someValue = (string) SharedStorage.Data["someKey"];

如果你想更大胆一些,并且正在使用。net 4,你也可以使用Expando对象,就像ASP中控制器可用的ViewBag成员一样。. NET MVC 3:

dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;

按照您通常使用Session变量的方式,您真正需要的只是一个像这样的通用Dictionary集合。您实际上不需要编写类。但是如果你需要添加额外的功能和/或语义,你当然可以用一个类包装集合,只包括一个索引器。

对于其他集合,请查看集合。通用的名称空间。