如何动态获取 ImageFormat 属性之一(如 ImageFormat.Png 或 ImageFormat.Jpeg)?
How to get one of the ImageFormat properties (like ImageFormat.Png or ImageFormat.Jpeg) dynamically?
你能帮我解决一些问题吗?
我想获取 ImageFormat 属性之一(如 ImageFormat.Png 或 ImageFormat.Jpeg 等)。我动态地需要它。
该方法应该看起来像(如我所见):
private List<ImageFormat> GetValidImageFormats()
{
List<ImageFormat> result = new List<ImageFormat>()
foreach (string extension in ValidExtensions)
{
// do some expression magic
}
}
我对 foreach 中的代码有疑问。我什至不确定使用 Expression Trees
.
我需要它作为我上传图像文件的自定义验证器。任何帮助都很棒。 +1 任何相关解决方案。
编辑:
ValidExtensions
= new[] {"jpg", "png", "jpeg", "bmp", "gif", "icon"}
的可能值
只要您的扩展名列表与从 ImageFormat
class 返回的内容匹配,就像这样:
private List<string> ValidExtensions = new List<string> {"bmp", "jpeg", "png"};
您可以使用反射将这些字符串中的每一个转换为它们的等价物ImageFormat
:
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();
}
svick在评论中留下了替代方案,更清楚地表明了你的意图。
您可以使用 GetProperty()
的不同重载来传递一个位掩码,告诉它如何搜索,而不是将字符串转换为标题大小写以使其匹配方法调用...在这种情况下,找到public 静态成员并完全忽略大小写。
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();
}
你能帮我解决一些问题吗?
我想获取 ImageFormat 属性之一(如 ImageFormat.Png 或 ImageFormat.Jpeg 等)。我动态地需要它。 该方法应该看起来像(如我所见):
private List<ImageFormat> GetValidImageFormats()
{
List<ImageFormat> result = new List<ImageFormat>()
foreach (string extension in ValidExtensions)
{
// do some expression magic
}
}
我对 foreach 中的代码有疑问。我什至不确定使用 Expression Trees
.
我需要它作为我上传图像文件的自定义验证器。任何帮助都很棒。 +1 任何相关解决方案。
编辑:
ValidExtensions
= new[] {"jpg", "png", "jpeg", "bmp", "gif", "icon"}
只要您的扩展名列表与从 ImageFormat
class 返回的内容匹配,就像这样:
private List<string> ValidExtensions = new List<string> {"bmp", "jpeg", "png"};
您可以使用反射将这些字符串中的每一个转换为它们的等价物ImageFormat
:
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();
}
svick在评论中留下了替代方案,更清楚地表明了你的意图。
您可以使用 GetProperty()
的不同重载来传递一个位掩码,告诉它如何搜索,而不是将字符串转换为标题大小写以使其匹配方法调用...在这种情况下,找到public 静态成员并完全忽略大小写。
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();
}