Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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# 如何在类中实现Foreach,以便获得每个键的名称和值?_C#_Foreach - Fatal编程技术网

C# 如何在类中实现Foreach,以便获得每个键的名称和值?

C# 如何在类中实现Foreach,以便获得每个键的名称和值?,c#,foreach,C#,Foreach,我想用foreach来表示区域,比如 public class Zone { public string zoneID { get; set; } public string zoneName { get; set; } public string zonePID { get; set; } } 我只是不知道如何在Zone类中实现GetEnumerator你不能用简单的方法枚举类的属性 在类中使用字符串数组、字符串列表或字典 注意:确实可以使用反射枚举类的属性,但在您的

我想用foreach来表示区域,比如

public class Zone
{
    public string zoneID { get; set; }
    public string zoneName { get; set; }
    public string zonePID { get; set; }
}
我只是不知道如何在Zone类中实现GetEnumerator

你不能用简单的方法枚举类的属性

在类中使用字符串数组、字符串列表或字典

注意:确实可以使用反射枚举类的属性,但在您的情况下,这不是一种方法。

您不能用简单的方法枚举类的属性

var zone = new Zone(){zoneId = "001", zoneName = "test"};
foreach(var field in zone)
{
   string filedName = field.Key;  //for example : "zoneId"
   string filedValue = filed.value; //for example : "001"
}
在类中使用字符串数组、字符串列表或字典

注意:确实可以使用反射枚举类的属性,但在您的情况下,这不是方法。

您可以为Zone配备此方法:

var zone = new Zone(){zoneId = "001", zoneName = "test"};
foreach(var field in zone)
{
   string filedName = field.Key;  //for example : "zoneId"
   string filedValue = filed.value; //for example : "001"
}
foreach(var field in zone)
{
   string filedName = field.zoneID;  //Id of property from Zone Class
   string filedValue = filed.zoneName ; //name of property from Zone Class
}
那你就可以说了

或者,您可以将GetEnumerator实现为迭代器块,在其中返回三个新的KeyValuePair

我并不是说这种设计特别值得推荐。

你可以用这种方法装备Zone:

foreach(var field in zone)
{
   string filedName = field.zoneID;  //Id of property from Zone Class
   string filedValue = filed.zoneName ; //name of property from Zone Class
}
那你就可以说了

或者,您可以将GetEnumerator实现为迭代器块,在其中返回三个新的KeyValuePair


我不是说这种设计特别值得推荐。

谢谢eveyrone!看来我需要用反思来实现目标

public Dictionary<string, string> AsDictionary()
{
  return new Dictionary<string, string>
    {
      { "zoneID", zoneID },
      { "zoneName", zoneName },
      { "zonePid", zonePid },
    };
 }

只是不知道这是否是一个好的解决方案。

谢谢eveyrone!看来我需要用反思来实现目标

public Dictionary<string, string> AsDictionary()
{
  return new Dictionary<string, string>
    {
      { "zoneID", zoneID },
      { "zoneName", zoneName },
      { "zonePid", zonePid },
    };
 }

只是不知道这是否是一个好的解决方案。

要得到一个好的答案,你可能应该解释一下你实际上想要实现的目标。您可以使用反射来实现IEnumerable,但我怀疑这是否是解决更大问题的好方法。一种常见的替代方法是,您的类使用字典来维护字段名和值,然后枚举这些字段名和值非常简单,因为这正是字典在枚举时产生的结果。但是问题中没有足够的信息来知道正确的答案。这肯定是一个,也就是说,你认为这个解决方案A应该解决一些问题B,但不是要求我们帮助你解决B,而是要求我们帮助你解决不起作用的解决方案A。为了得到一个好的答案,你可能应该解释一下你到底想要完成什么。您可以使用反射来实现IEnumerable,但我怀疑这是否是解决更大问题的好方法。一种常见的替代方法是,您的类使用字典来维护字段名和值,然后枚举这些字段名和值非常简单,因为这正是字典在枚举时产生的结果。但是问题中没有足够的信息来知道正确的答案。这肯定是一个,也就是说,你认为这个解决方案A应该解决一些问题B,但你不是要求我们帮助你解决B,而是要求我们帮助你解决不起作用的解决方案A。你好,虽然这很可能回答问题,请注意,其他用户可能没有您的知识渊博。你为什么不加一点解释,解释一下这段代码的工作原理呢?谢谢您好,虽然这可能很好地回答了这个问题,但请注意,其他用户可能没有您的知识渊博。你为什么不加一点解释,解释一下这段代码的工作原理呢?谢谢