如果您有一个自定义集合类,它将单个类别的水果的权重单独存储在浮点数/双精度中,如下所示:
1.1, 3.3, 6.6, 4.4, ...
并且您需要指定它是浮点数还是双精度并区分水果类型,最好这样做:
使用枚举:
FruitList<float, FruitType.Orange>
或
在构造函数中使用枚举:
FruitList<float> (FruitType.Orange)
或
使用课程:
FruitList<float, Orange>
或
在构造函数中使用类:
FruitList<float> (Orange)
令我困惑的是,在&lt;&gt;中指定这些类型的东西是否有意义。区域(不知道该区域叫什么)?
哪种更好,更快,更有效?
顺便说一句,Orange类从来没有在任何地方使用过,只要写下来就可以指定那样的类型吗?
编辑:顺便说一下,这只是一个示例,而不是实际情况,但这反映了一个明确的方式。喜欢它的所有浮点/双打并传递给其他一些方法。但这些方法需要知道什么类型的水果才能正确执行。水果本身毫无意义。
答案 0 :(得分:1)
FruitList<float>(FruitType.Orange)
可能是要走的路。
float
除了类型参数外不能是任何东西。
水果类型只是一个属性。为它创建一个单独的类型并使用类型参数是没有意义的。
答案 1 :(得分:1)
首先,枚举值不是类型,因此示例
FruitList<float, FruitType.Orange>
不起作用。如果您想确保将通用列表静态输入Orange
,则必须使用此列表
FruitList<float, Orange>
即使您永远不会使用Orange
课程。在我看来,可能没有必要,因为你可以在变量名中传达类型:
FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);
答案 2 :(得分:0)
取决于你的橘子是否会像一个......标签......就像Color一样。汽车可以是蓝色和红色,仍然是“相同”的汽车。如果你想让Orange能够做一些与普通水果或苹果不同的东西,我会创建一个抽象的Fruit类和一个子类Orange,然后使用&lt;&gt;事情。如果只是一个标签的东西,比如颜色,那么枚举可以做得很好我猜。
我认为通过使用类/结构进行类型检查更容易。比如,如果有人试图在你的水果清单中添加苹果类水果,会发生什么?它会变成橙色吗?是否需要检查水果的果实类型是否为橙色?如果不是会发生什么?的ArgumentException?
我想我会去上课和&lt;&gt;啄。但那就是我。实际上,如果是我,我想我会继续前进并使用decimal
来衡量体重以及其他需要测量的东西......然后就会有类似的东西(完全错误的语法等,但你得到了希望这个想法):
class FruitList<TFruit> where TFruit : Fruit {}
abstract class Fruit {public abstract decimal Weight {get; protected set; }}
class Orange : Fruit { ... }