LINQ & Enumeration
本文关键字:Enumeration amp LINQ | 更新日期: 2023-09-27 18:20:10
我有这个枚举
public enum LightFiles
{
PNG,
JPG,
GIF,
FLV,
TIF,
BMP,
MP3,
WAV,
WMA,
TXT,
PDF,
XML,
DOC,
XLS,
DBF,
SQL,
CSS,
HTM
}
我需要检测文件名是否有枚举。项目,如果是则返回TRUE。
我想通过LINQ有一些解决方案。我真的不知道如何解决这个问题。。。
有线索吗?
static public bool IsLightFile(string fileName)
{
// Needs some LINQ
}
static public bool IsLightFile(string fileName)
{
//Use any with names returned from the enum.
return Enum.GetNames(typeof(LightFiles)).Any(w => w == fileName);
}
有点不确定你到底在问什么,我可以看到三种可能性。。。
如果你只想让文件名包含任何枚举字符串,你可以这样做:
static public bool IsLightFile(string fileName)
{
foreach (var eVal in Enum.GetNames(typeof(LightFiles)))
{
if (fileName.Contains(eVal))
{
return true;
}
}
return false;
}
或者,如果你想看看它是否只是以该扩展结束,你可以这样做:
static public bool IsLightFile(string fileName)
{
foreach (var eVal in Enum.GetNames(typeof(LightFiles)))
{
if (Path.GetExtension(fileName).Equals(eVal))
{
return true;
}
}
return false;
}
或者,如果你说filename
必须完全等于enum
的值,你可以这样做:
static public bool IsLightFile(string fileName)
{
return Enum.IsDefined(typeof(LightFiles), fileName);
}
显然,您需要进行null检查,使字符串比较不区分大小写,等等。
static public bool IsLightFile(string fileName)
{
var extension = Path.GetExtension(fileName).Remove(0, 1);
return Enum.GetNames(typeof(LightFiles)).Any(enumVal => string.Compare(enumVal, extension, true) == 0);
}
我不明白你为什么要在这里使用LINQ。要查看字符串是否是有效的枚举值,一个比在Enum.GetNames
的结果上循环(无论是显式还是隐式使用LINQ)更自然的解决方案是Enum.TryParse
。
string fileExtension = Path.GetExtension(fileName);
if (fileExtension.StartsWith("."))
fileExtension = fileExtension.Substring(1);
LightFiles lightFile;
return Enum.TryParse(fileExtension, true, out lightFile);
注意:替代Enum.IsDefined
始终区分大小写,而文件扩展名通常被视为不区分大小写。
public bool IsLightFile(string filename)
{
return Enum.GetNames(typeof(LightFiles)).Contains(
Path.GetExtension(filename).Remove(0, 1).ToUpper());
}
LINQ在其中发挥作用的唯一方法是Enumerable.Contains()扩展方法。
另请参阅:
枚举.GetNames()
Path.GetExtension()
String.Remove()
String.ToUpper()