与C#泛型哈希集声明斗争

与C#泛型哈希集声明斗争,c#,generics,hashset,C#,Generics,Hashset,我试图在C#中声明类似的内容(注意这不是正确的C#语法): enum颜色{红、黄、绿、蓝} 键入ColorSet HashSet;//#1. void setColors(ColorSet colors={Red,Green})/#2 { ... } 那么--如何为HashSet声明同义词类型,以及如何定义该类型的常量以用作函数参数的默认值 对于#1,一种可能的方法是使用空包装器类: class ColorSet : HashSet<Color> { } class ColorS

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

enum颜色{红、黄、绿、蓝}
键入ColorSet HashSet;//#1.
void setColors(ColorSet colors={Red,Green})/#2
{ ... }
那么--如何为HashSet声明同义词类型,以及如何定义该类型的常量以用作函数参数的默认值

对于#1,一种可能的方法是使用空包装器类:

class ColorSet : HashSet<Color> { }
class ColorSet:HashSet{}
--但是我如何定义这个类的常数呢

提前谢谢

如何为HashSet声明同义词类型

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

如何定义该类型的常数以用作函数参数默认值

不能:类不能是常量(除了
string
literals)。您可以在某个地方有一个
静态只读
字段,但它是可变的

如何为HashSet声明同义词类型

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

如何定义该类型的常数以用作函数参数默认值


不能:类不能是常量(除了
string
literals)。您可以在某个地方有一个
静态只读
字段,但它是可变的。

您可以尝试以下方法:

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};

    ....
}
公共枚举颜色{红、黄、绿、蓝}
公共类ColorSet:HashSet{}
私有void setColors(ColorSet colors=null)
{
如果(颜色==null)
颜色=新颜色集{Color.Red,Color.Green};
....
}

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

您可以尝试以下方法:

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};

    ....
}
公共枚举颜色{红、黄、绿、蓝}
公共类ColorSet:HashSet{}
私有void setColors(ColorSet colors=null)
{
如果(颜色==null)
颜色=新颜色集{Color.Red,Color.Green};
....
}

请注意,C#编译器要求方法的默认参数为comile time Defite,所以不能使用ColorSet的任何静态实例作为方法的默认参数。相反,假设null是默认参数,在这种情况下,使用方法正文中所需的预定义颜色集。

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

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

void setColors(ColorSet colors)
{
    ...
}
void setColors()
{
    setColors(new ColorSet { Color.Red, Color.Green });
}
enum颜色{红、黄、绿、蓝}
类ColorSet:HashSet{}
无效设置颜色(颜色设置颜色)
{
...
}
void setColors()
{
setColors(新颜色集{Color.Red,Color.Green});
}

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

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

void setColors(ColorSet colors)
{
    ...
}
void setColors()
{
    setColors(new ColorSet { Color.Red, Color.Green });
}
enum颜色{红、黄、绿、蓝}
类ColorSet:HashSet{}
无效设置颜色(颜色设置颜色)
{
...
}
void setColors()
{
setColors(新颜色集{Color.Red,Color.Green});
}

您实际上想在这里做什么?Marc Gravell:正如我写的:我想为“颜色集”使用一个单一的类型名称,因为它被多次使用,例如作为函数参数。为了定义参数的默认值,我需要一个常量定义或一个文本。这里唯一可以使用的常量是
null
。您实际上想在这里做什么?Marc Gravell:正如我写的:我想为“颜色集”使用一个类型名称,因为它被多次使用,例如,作为功能参数。为了定义参数的默认值,我需要一个常量定义或一个文本。这里唯一可以使用的常量是
null
。我认为您的解决方案和Andy的解决方案同样有用。:-)我认为,你的解决方案和安迪的解决方案同样有用。:-)