在C#泛型HashSet声明中苦苦挣扎

时间:2014-09-23 10:11:46

标签: c# generics hashset

我试图在C#中声明这样的内容(注意这是不正确的C#语法):

enum Color { Red, Yellow, Green, Blue }
type ColorSet HashSet<Color>;                        // #1

void setColors (ColorSet colors = { Red, Green })    // #2
{ ... }

那么 - 如何为HashSet声明同义词类型,以及如何定义要使用的类型的常量,例如作为函数参数的默认值?

对于#1,可能的方法是一个空的包装类:

class ColorSet : HashSet<Color> { }

- 但是如何定义该类的常量?

提前致谢。

3 个答案:

答案 0 :(得分:2)

  

如何为HashSet声明同义词类型,

你不能;在C#中没有这样的东西。有一个using 别名,但这是每个文件。

  

如何定义要使用的那种类型的常量,例如作为函数参数的默认值?

你不能:一个类不能是常量(string个文字除外)。

答案 1 :(得分:2)

您可以尝试这种方法:

public enum Color { Red, Yellow, Green, Blue }    
public class ColorSet : HashSet<Color> {}

private void setColors(ColorSet colors = null)
{
    if (colors == null)
        colors = new ColorSet {Color.Red, Color.Green};

    ....
}

请注意,C#编译器要求方法的默认参数为comile-time defiite,因此您不能将ColorSet的任何静态实例用作方法的默认参数。相反,假设null是默认参数,在这种情况下,使用方法体中需要的预定义colorset。

答案 2 :(得分:2)

您无法直接为方法设置引用类型的(非空)默认值,但您可以创建两个相似的方法:

enum Color { Red, Yellow, Green, Blue }
class ColorSet : HashSet<Color> { }

void setColors(ColorSet colors)
{
    ...
}
void setColors()
{
    setColors(new ColorSet { Color.Red, Color.Green });
}