我有这个枚举
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
}
答案 0 :(得分:11)
static public bool IsLightFile(string fileName)
{
//Use any with names returned from the enum.
return Enum.GetNames(typeof(LightFiles)).Any(w => w == fileName);
}
答案 1 :(得分:2)
有点不确定你在问什么,我可以看到三种可能性......
如果您只想让文件名包含任何枚举字符串,您可以这样做:
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);
}
显然,你需要进行空检查,使字符串比较不区分大小写,等等。
答案 2 :(得分:1)
public bool IsLightFile(string filename)
{
return Enum.GetNames(typeof(LightFiles)).Contains(
Path.GetExtension(filename).Remove(0, 1).ToUpper());
}
LINQ参与其中的唯一方法是Enumberable.Contains()扩展方法。
另见:
Enum.GetNames()
Path.GetExtension()
String.Remove()
String.ToUpper()
答案 3 :(得分:1)
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);
}
答案 4 :(得分:1)
我不明白为什么你在这里使用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
始终区分大小写,而文件扩展名通常被视为不区分大小写。