lizf2019 发表于 2023-1-3 22:00

【C#】如何不用if等繁杂语句实现以下功能

引用代码来自:https://blog.csdn.net/myqq1418/article/details/106938626/


目的:实现判断文件真实类型(匹配数值对应拓展名)
大致流程:
程序会执行一个函数 根据上图对应的数值判断文件类型
但是总共有十几个数 用if判断很麻烦
求助各位大佬有没有什么好方法{:301_997:}

yuqiu 发表于 2023-1-3 22:10

本帖最后由 yuqiu 于 2023-1-3 22:13 编辑

switch吧 而且我看了下他这个函数CheckTrueFileName没有返回值

Luckyu920 发表于 2023-1-3 22:20

可以试试switch语句。

Takitooru 发表于 2023-1-3 22:32

c#使用表驱动法代替繁琐的if-else语句和switch case语句
https://blog.csdn.net/DETEREE/article/details/106292154

whg118 发表于 2023-1-3 22:50

4楼简便。

xiangzz 发表于 2023-1-4 02:47

枚举,一个if就搞定

天心阁下 发表于 2023-1-4 03:27

string a=CheckTrueFileName();
if(Enum.TryParse(a,true,out FileExtension fileExtension))
{
Console.WriteLine(fileExtension);
}
https://learn.microsoft.com/zh-cn/dotnet/api/system.enum.tryparse

LiuMou666 发表于 2023-1-4 03:47

使用键值对存放枚举,然后使用Dictionary[方法返回值]就是你所要的拓展名了

MIAIONE 发表于 2023-1-4 07:35

Microsoft Docs Enum.TryParse<TEnum>(String, TEnum) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值
https://learn.microsoft.com/zh-cn/dotnet/api/system.enum.tryparse?view=net-7.0#system-enum-tryparse-1(system-string-0@)

官方示例:

using System;

enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         Colors colorValue;
         if (Enum.TryParse(colorString, out colorValue))
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         else
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       blue is not a member of the Colors enumeration.
//       Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.


我个人比较喜欢有泛型的, 强类型应该能确定就确定, 一般情况下我不用有type类型参数的相关重载.

不知道改成啥 发表于 2023-1-4 08:34

直接数字强行转枚举不就行了吗
页: [1] 2
查看完整版本: 【C#】如何不用if等繁杂语句实现以下功能