C# 向新对象实例字段添加元组

C# 向新对象实例字段添加元组,c#,switch-statement,tuples,C#,Switch Statement,Tuples,我正在尝试运行一个传递并返回度量值对象的函数。在Measurement对象中,我有一个变量volume,它是一个元组,同时接受一个十进制和一个名为VolumeUnits的枚举,其中包含一系列液体测量类型 public Measurement ConvertVolumeUnit(Measurement measure) { Measurement.VolumeUnits newUnit; decimal size = measure.volume.Item

我正在尝试运行一个传递并返回
度量值
对象的函数。在
Measurement
对象中,我有一个变量
volume
,它是一个元组,同时接受一个十进制和一个名为
VolumeUnits
的枚举,其中包含一系列液体测量类型

 public Measurement ConvertVolumeUnit(Measurement measure)
    {
        Measurement.VolumeUnits newUnit;
        decimal size = measure.volume.Item1;


        switch (measure.volume.Item2)
        {
            case Measurement.VolumeUnits.tsp:
                if (measure.volume.Item1 > 3)
                {
                    size = size / 3;
                    goto case Measurement.VolumeUnits.Tbsp;
                }
                else
                {
                    newUnit = Measurement.VolumeUnits.tsp;
                    break;
该函数运行一个转换单位的开关,但我不确定如何建立一个新的
Measurement
实例并创建一个新的
Measurement.volume
项以返回新转换的元组

             case Measurement.VolumeUnits.gal:
                 newUnit = Measurement.VolumeUnits.gal;
                 break;
             default:
                 break;
         }

         Measurement newMeasure = new Measurement();
         newMeasure.volume = Tuple.Create(size, newUnit);

基本上,我想返回
newMeasure
,但我必须先填充
volume
元组。我的错误是告诉您newUnit未分配。这仅仅是因为
默认值
没有为
新单元
赋值吗?

写下这一切后,似乎确实必须在默认部分或最初为避免此错误而赋值

差不多。当
measure.volume.Item2
不是
tsp
gal
时会发生什么?即使覆盖了
VolumeUnits
enum中当前定义的所有值,也可以使用声明范围之外的值。例如:
Measurement.VolumeUnits someundinedunit=(Measurement.VolumeUnits)9999是有效的可执行代码。编译器识别出有一个可能的代码路径,
newUnit
没有被赋值。