English 中文(简体)
C# 流传的Objetcs
原标题:C# Hastable of Objetcs

我手上有散列的物品, 我手上有一份清单, 如何访问它?

ls.cs


         class lh 
                {
                    public string name;
                    public  List<ulong> nList = new List<ulong>(); 

                    public lh(string name)
                    {
                        this.name = name; ;
                    }
                }

    Program.cs

    static void Main(string[] args)
    {

    while((line=ps.ReadLine()) != null) 
    { 
        gen.h_lh.Add(line, new lh(line));
    }
    }    
    public class gen
        {
          public static Hashtable h_lh = new Hashtable();
        }

this works. when I debug I can see the object created in the hashtable; I just cant/dont know how to access/store value to the list it s gotta be something like gen.h_lh[lh].something right ? but this didnt work. what did I miss?

问题回答

首先, Hashtable 已经过时, 使用 Digctionary< TKey; TVALUE> 代替 (在您的情况下, Digtary<string, lh>

如果给定了一个密钥,您可以用以下方式访问该密钥的值: h_lh[key]

或者您可以用下列方式列出所有密钥/价值配对:

foreach (KeyValuePair<string, lh> pair in h_lh)
    pair.Value // this is an lh object

您也可以仅列举密钥 h_lh.Keys ,或仅列出数值 h_lh.Values

散列表格是一个代表集的数据结构。 这意味着,根据定义,您不想访问散列表格以获得元素, 您只要在元素存在时添加、 删除或 aks 即可。 这些是带有集的基本操作 。

上面说, HashSet<T> in.NET 没有索引。 为什么? 想想您自己写的行数 :

var item = gen.h_lh[lh]

如果您真的可以提供 < code> lh 索引, 您期望散列表格给您什么? 相同的例子吗? 当然没有, 如果您在索引器中使用它, 您已经拥有了。 所以也许您的问题没有很好地确定 。

首先,您需要确定为什么( 以及如何) 您想要访问元素。 您想要的只是通过所有元素进行循环, 或者想要快速索引其中的任何元素? 如果您只是想要在某个点获取所有元素 。 那么您需要的就只有 : HashSet< T> 执行 < code> > Ienumberable< T> 。 如果您需要获得一个特定元素, 那么您必须有一些 < em>key 来识别元素( 如这里的 < code> name 属性 ), 在此情况下, 您想要的不是 < code> HashSet< lh> 而是一个 < code> Dictionary< string, lh> , 正如@ Tergiver 所说的 。

foreach(System.System.Collections.DictionaryEntry entry in h_lh) 
{
    Console.WriteLine("Key: " + entry.Key.ToString() + " | " + "Value: " + entry.Value.ToString());  
}

或者您可以使用密钥访问它

lh myLh = h_lh[line];

供评论的更新答复

foreach(System.System.Collections.DictionaryEntry entry in h_lh) 
{
    List<ulong> nList = (ulong)entry.Value; 
    nList.Add(1); 
}




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...