如何从Struct转换Method参数中的数据类型?

时间:2019-02-08 08:41:46

标签: c# methods struct enums type-conversion

问题

我创建了一个结构,一个枚举和一个方法。 枚举在结构中使用。该方法使用该结构。

当我尝试从主体接受用户的输入调用该方法时,出现转换错误。 我无法从结构转换为双精度型。

在这种情况下,如何转换用户的输入?

其他信息

(这应该转换温度类型,现在我只写了其中一种温度的转换,但是其他温度都相同(公式除外))

PS:我还没有了解列表和接口,因此无法在其他班级做到这一点。

public enum MyEnum {C,F,K}

public struct MyStruct
{
    public double foo;
    public MyEnum bar; 
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Make user put in a double followed by a space and one of the Enums");
        string input = Console.ReadLine();
        string[] parts = input.Split(' '); 

        MyStruct temp = new MyStruct (); 
        temp.foo= double.Parse(parts[0]);

        if(parts[1] == "C")
        {

            TheMethodIUSedForC(parts[0]);
            temp.bar= MyEnum.C;
        }
    }
    public MyStruct TheMethodIUSedForC(MyStruct t)
    {
        if (t.bar== MyEnum.F)
        {
            t.bar= MyEnum.F;
            t.foo = (t.foo* 1.8) + 32;
            return t;
        }
        else if (t.bar== MyEnum.K)
        {
            t.bar= MyEnum.K;
            t.foo= t.foo + 273.15;
            return t;
        }
        else
        {
            return t;
        }
    }

2 个答案:

答案 0 :(得分:0)

看着您的代码尝试对其进行编译,但我无法得到错误。就我而言,错误不是关于 double 而是关于 string ,这是正确的,因为 parts [0] 是字符串。 您的方法:

public MyStruct TheMethodIUSedForC(MyStruct t)

接受 MyStruct 作为参数,因此您不能传递 parts [0] 作为参数,因为它是字符串类型。如果通过例如它将编译。 temp ,属于MyStruct类型。但是,由于尚未设置 bar 字段,因此可能无法按预期工作。 更改:

if(parts[1] == "C")
{
    TheMethodIUSedForC(parts[0]);
    temp.bar= MyEnum.C;
}

收件人:

if(parts[1] == "C")
{
    temp.bar= MyEnum.C;
    TheMethodIUSedForC(temp);
}

它应该更好。

答案 1 :(得分:0)

我不知道我是否正确理解了您的问题,但是您可以构建临时结构并将其传递给这样的方法:

public enum MyEnum {C,F,K}

public struct MyStruct
{
    public double foo;
    public MyEnum bar;
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Make user put in a double followed by a space and one of the Enums");
        string input = Console.ReadLine();
        string[] parts = input.Split(' ');

        MyStruct temp = new MyStruct();
        temp.foo = double.Parse(parts[0]);
        temp.bar = (MyEnum)Enum.Parse(typeof(MyEnum),parts[1]);
        MyMethod(temp);
    }
    public static MyStruct MyMethod(MyStruct t)
    {
        if (t.bar == MyEnum.F)
        {
            t.bar = MyEnum.F;
            t.foo = (t.foo * 1.8) + 32;
            return t;
        }
        else if (t.bar == MyEnum.K)
        {
            t.bar = MyEnum.K;
            t.foo = t.foo + 273.15;
            return t;
        }
        else
        {
            return t;
        }
    }
}

通过这种方式,您甚至不需要在“ MyMethod”中重新分配“ bar”变量,只需详细说明foo变量即可。

当然,您需要正确处理无法将提供的字母解析为MyEnum的情况。为此,您可以使用Enum.TryParse(...)