如何将Delphi中的一组枚举范围转换为C#?

13 浏览
0 Comments

如何将Delphi中的一组枚举范围转换为C#?

有没有人知道在C#中是否有一个与Java的Set集合相当的好的替代品?我知道你可以使用DictionaryHashTable来模拟一个集合,通过填充但忽略值,但这并不是一个很优雅的方式。

0
0 Comments

在Delphi中,我们可以使用枚举范围(enumeration range)来表示一组连续的枚举值。然而,在将Delphi代码转换为C#时,我们需要找到一种适当的方式来表示这些枚举范围。

如果我们在.NET 4.0或更高版本中使用C#,我们可以使用SortedSet<T>来表示枚举范围。这个类可以对元素进行排序,并且在搜索和操作操作中具有O(log n)的时间复杂度。

如果我们不需要对枚举范围进行排序,那么我们可以使用HashSet<T>来表示枚举范围。这个类在搜索和操作操作中具有O(1)的时间复杂度。

因此,我们可以根据具体的需求选择适当的数据结构来表示枚举范围。如果需要排序,就使用SortedSet<T>,否则使用HashSet<T>

以下是在C#中如何使用这些数据结构来表示枚举范围的示例代码:

// 使用SortedSet来表示枚举范围
SortedSet enumRange1 = new SortedSet();
enumRange1.Add(1);
enumRange1.Add(2);
enumRange1.Add(3);
// 使用HashSet来表示枚举范围
HashSet enumRange2 = new HashSet();
enumRange2.Add(4);
enumRange2.Add(5);
enumRange2.Add(6);

通过使用合适的数据结构来表示枚举范围,我们可以很方便地在C#中处理这些枚举值。

0
0 Comments

问题的出现原因是,在Delphi中,枚举范围可以通过创建一个字典或哈希表来表示。然而,在C#中,没有直接等价的数据结构来表示枚举范围。

解决方法是使用HashSet。HashSet是一个高性能的集合,不包含重复元素,并且元素没有特定的顺序。通过使用HashSet,可以实现类似于字典或哈希表的高性能集合操作。

然而,需要注意的是,HashSet在较旧的.NET框架版本中不可用。在这种情况下,需要继续使用修改过的字典或哈希表来表示枚举范围。

下面是使用HashSet的示例代码:

HashSet<int> enumRange = new HashSet<int>();
enumRange.Add(1);
enumRange.Add(2);
enumRange.Add(3);
foreach (int value in enumRange)
{
    Console.WriteLine(value);
}

上述代码创建了一个HashSet集合,然后向集合中添加了几个整数。然后,通过foreach循环遍历集合,以打印集合中的每个元素。

使用HashSet可以轻松地表示枚举范围,并且提供了高性能的集合操作。然而,如果需要在较旧的.NET框架版本中使用,仍然需要使用修改过的字典或哈希表来表示枚举范围。

0
0 Comments

问题的原因是在Delphi中使用了一组枚举范围,现在需要将其转换成C#语言。解决方法是使用.NET 3.5中的HashSet。另外,还可以使用Wintellect PowerCollections库。HashSet被称为HashSet而不是Set的原因是为了避免与其他语言的关键字冲突。在C#中,set并不是一个关键字,而是具有特殊含义的属性。HashSet之所以被称为HashSet,而不仅仅是Set,与Java中的命名方式相同,Set描述的是一个接口,而HashSet描述的是一种实现,具体来说,它是由哈希映射支持的Set。.NET在处理集合方面不如Java,直到.NET 3.5才引入了HashSet。Java有许多不同的Set实现,而.NET在.NET 3.5中只有一个HashSet,在.NET 4中有两个HashSet和SortedSet。

0