我创建了一个结构,一个枚举和一个方法。 枚举在结构中使用。该方法使用该结构。
当我尝试从主体接受用户的输入并调用该方法时,出现转换错误。 我无法从结构转换为双精度型。
在这种情况下,如何转换用户的输入?
(这应该转换温度类型,现在我只写了其中一种温度的转换,但是其他温度都相同(公式除外))
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;
}
}
答案 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(...)