与C#泛型哈希集声明斗争
我试图在C#中声明类似的内容(注意这不是正确的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
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的解决方案同样有用。:-)我认为,你的解决方案和安迪的解决方案同样有用。:-)