Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中使用带Equals方法的Switch case#_C#_Asp.net - Fatal编程技术网

C# 在C语言中使用带Equals方法的Switch case#

C# 在C语言中使用带Equals方法的Switch case#,c#,asp.net,C#,Asp.net,有没有办法将下面的if-else条件转换为C#中的Switch。我正在使用Equals方法检查类型,但无法转换为switch case if (fi.FieldType.Equals(typeof(int))) { fi.SetValue(data, BitConverter.ToInt32(buffer, 0)); } else if (fi.FieldType.Equals(typeof(bool))) { fi.SetValue(data, BitConverter.ToB

有没有办法将下面的if-else条件转换为C#中的Switch。我正在使用Equals方法检查类型,但无法转换为switch case

if (fi.FieldType.Equals(typeof(int)))
{
    fi.SetValue(data, BitConverter.ToInt32(buffer, 0));
}
else if (fi.FieldType.Equals(typeof(bool)))
{
    fi.SetValue(data, BitConverter.ToBoolean(buffer, 0));
}
else if (fi.FieldType.Equals(typeof(string)))
{
    byte[] tmp = new byte[la.length];
    Array.Copy(buffer, tmp, tmp.Length);
    fi.SetValue(data, System.Text.Encoding.UTF8.GetString(tmp));
}
else if (fi.FieldType.Equals(typeof(double)))
{
    fi.SetValue(data, BitConverter.ToDouble(buffer, 0));
}
else if (fi.FieldType.Equals(typeof(short)))
{
    fi.SetValue(data, BitConverter.ToInt16(buffer, 0));
}
请帮助我们……

使用C#7,您可以执行以下操作:

switch (fi.FieldType)
{
    case var _ when fi.FieldType.Equals(typeof(int)):
        fi.SetValue(data, BitConverter.ToInt32(buffer, 0));
        break;
    case var _ when fi.FieldType.Equals(typeof(bool)):
        fi.SetValue(data, BitConverter.ToBoolean(buffer, 0));
        break;

    //etc
}

请注意,这是使用
\uu
丢弃值,因为我们不关心它。

是的,使用C#7.0–模式匹配,您可以在此处看到C#模式匹配的示例:如果C#7使用模式表达式匹配
https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching
或以下,然后转换(类型)的类型字符串并与fi的字符串表示形式匹配。FieldType@TimSchmelter不需要模式匹配,代码检查
FieldType
的值。一个普通的开关可以工作。@PanagiotisKanavos,但是如果您试图将它与
typeof(x)
进行比较,编译器会抱怨您需要使用一个常量值。谢谢您的快速回复。您可以使用一个早期版本的开关too@Bhrathi这看起来像是反射代码。你到底想干什么?这可能有一个实现already@PanagiotisKanavos是的,假设它们都是CLR类型的course@DavidG在这种情况下,这是一个安全的假设。BitConverter甚至不支持所有基类型