C#按值获取字典键,其中值为结构类型

C#按值获取字典键,其中值为结构类型,c#,dictionary,struct,timer,key,C#,Dictionary,Struct,Timer,Key,请告诉我这是可能的,如何得到这个 In C# I have a struct like: public struct FrmData{ int num; int x; Timer t; } 我使用的不是字典,它的值就是那个结构 public Dictionary<int, FrmData> dictionary; 我的问题是:我能从引发此事件的计时器中获取词典的密钥吗?! 谢谢唯一的方法是循环遍历键值对,检查每对键值是否与计时器匹配 比如: Timer t = sender a

请告诉我这是可能的,如何得到这个

In C# I have a struct like:

public struct FrmData{
int num;
int x;
Timer t;
}
我使用的不是字典,它的值就是那个结构

public Dictionary<int, FrmData> dictionary;
我的问题是:我能从引发此事件的计时器中获取词典的密钥吗?!
谢谢

唯一的方法是循环遍历键值对,检查每对键值是否与计时器匹配

比如:

Timer t = sender as Timer;
foreach(var kvp in dictionary){ // Could also do KeyValuePair<int, FrmData> instead of var
    if(kvp.Value.Timer == t)
    {
         int key = kvp.Key
         // Do something with the key
    }
}

public struct FrmData
{
    int num;
    int x;
    Timer t;

    public Timer Timer
    {
        get { return t; }
    }
}
Timer t=发送方作为定时器;
foreach(dictionary中的var-kvp){//还可以执行KeyValuePair而不是var
如果(kvp.Value.Timer==t)
{
int key=kvp.key
//用钥匙做点什么
}
}
公共结构FrmData
{
int-num;
int x;
定时器t;
公共定时器
{
获取{return t;}
}
}
编辑


我最初的回答是假设你的字典结构是一成不变的。如果没有,Will的注释将是更好的选择,因为它将使您能够更有效地引用该结构。

对象发送者
应该是计时器。您可以使用计时器本身作为字典
字典中的键,因此可以通过
字典[sender as Timer]
获取表单数据。如果您使用的是
结构,则不应该使用可变结构,尽管在这种情况下,您根本不应该使用
结构,由于您的值在概念上并不表示单个值,所以我不能使用Timer作为键,并且必须是一个struct作为值,因为这个struct就是示例。我的实际结构有更多的数据和定时器必须是其中之一。我是C#的新手,目前不知道其他解决方法。我需要这个快。但是谢谢你。@DraženkaLadišić事实上你的实际类型有更多的数据,这使得它更适合作为一个类,而不是一个
struct
。但是谢谢你的建议。下一次我将使用类。你能写一点这个代码的细节吗,我不完全理解。我是C语言新手,不知道如何写kvp.Value?!。。。。。很抱歉,这段代码只是一个简单的示例,所以我没有仔细阅读。foreach实际上应该是foreach(字典中的var kvp)。好的,现在我得到一个错误“Operator'==”不能应用于操作数mystruct和System.Windows.Forms.Timer”:(很抱歉,我忘了写kvp.Value.timerSorry,kvp.Value提供了对结构的访问,因此您需要进一步深入到计时器。为此,您需要编辑结构,通过提供属性或使计时器为公共的方式提供对计时器的访问。我将用一个示例进行更新。
public Dictionary<int, FrmData> dictionary;