C# 如何动态获取其中一个ImageFormat属性(如ImageFormat.Png或ImageFormat.Jpeg)?

C# 如何动态获取其中一个ImageFormat属性(如ImageFormat.Png或ImageFormat.Jpeg)?,c#,reflection,lambda,C#,Reflection,Lambda,你能帮我解决一些问题吗 我想获取一个ImageFormat属性(如ImageFormat.Png或ImageFormat.Jpeg等)。我需要它。 方法应该如下所示(在我看来): private List GetValidImageFormats() { 列表结果=新列表() foreach(ValidExtrains中的字符串扩展名) { //做一些表情魔术 } } 我对foreach中的代码有问题。我甚至不确定是否使用表达式树 我需要它为我的自定义验证上传的图像文件。任何帮助都很好+1以获

你能帮我解决一些问题吗

我想获取一个ImageFormat属性(如ImageFormat.Png或ImageFormat.Jpeg等)。我需要它。 方法应该如下所示(在我看来):

private List GetValidImageFormats()
{
列表结果=新列表()
foreach(ValidExtrains中的字符串扩展名)
{
//做一些表情魔术
}
}
我对foreach中的代码有问题。我甚至不确定是否使用
表达式树

我需要它为我的自定义验证上传的图像文件。任何帮助都很好+1以获取任何相关解决方案

编辑:
只要扩展名列表与从
ImageFormat
类返回的内容匹配,则
ValidExtensions
=
new[]{“jpg”、“png”、“jpeg”、“bmp”、“gif”、“icon”}
的可能值如下:

private List<string> ValidExtensions = new List<string> {"bmp", "jpeg", "png"};
斯维克在评论中留下了一个替代方案,它更清楚地表明了你的意图

您可以使用另一个重载
GetProperty()
传递一个位掩码,告诉它如何搜索,而不是将字符串转换为标题大小写以使其与方法调用匹配。。。在本例中,找到一个公共静态成员并完全忽略该案例

private List<ImageFormat> GetValidImageFormats()
{
    var t = typeof(ImageFormat);

    return ValidExtensions.Select(x =>
        (ImageFormat)t.GetProperty(x, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static)
                      .GetValue(null)).ToList();

}
private List GetValidImageFormats()
{
var t=类型(图像格式);
返回有效值。选择(x=>
(ImageFormat)t.GetProperty(x,BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static)
.GetValue(null)).ToList();
}

“jpg”、“png”、“jpeg”、“bmp”、“gif”、“icon”实际上不起作用
ImageFormat
不是枚举,这就是引发ArgumentException的原因。它可以工作!一些更改会很好
x.Substring(1).ToLower()
。在返回之前,我在
ValidExtensions
中手动将jpg更改为jpeg。可能更清晰的变体:
t.GetProperty(x,BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static)
private List<ImageFormat> GetValidImageFormats()
{
    var t = typeof(ImageFormat);

    return ValidExtensions.Select(x =>
        (ImageFormat)t.GetProperty(x.Substring(0, 1).ToUpper() + x.Substring(1))
                      .GetValue(null)).ToList();

}
private List<ImageFormat> GetValidImageFormats()
{
    var t = typeof(ImageFormat);

    return ValidExtensions.Select(x =>
        (ImageFormat)t.GetProperty(x, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static)
                      .GetValue(null)).ToList();

}