2014-12-19 2 views
1

У меня есть MimeVideo struct и используйте его в списке для хранения mime-видеофайла. Я пытаюсь получить значение mimefile имя от Ext, чтобы сохранить его в MediaTypeHeaderValue. Как это сделать?Как получить имя mime из массива struct

struct MimeVideo 
{ 
    private readonly string _ext; 
    private readonly string _file; 
    public MimeVideo(string ext, string file) 
    { 
     this._ext = ext; 
     this._file = file; 
    } 
    public string Ext { get { return _ext; } } 
    public string File { get { return _file; } } 

} 
static readonly IList<MimeVideo> MimeNames = new ReadOnlyCollection<MimeVideo> 
(new[] { 
    new MimeVideo (".mp4", "video/mp4"), 
    new MimeVideo (".ogg", "application/ogg"), 
    new MimeVideo (".ogv", "video/ogg"), 
    new MimeVideo (".webm", "video/webm") 
}); 

private static MediaTypeHeaderValue GetMimeNameFromExt(string ext) 
{ 
    string name ; 
    get the name of file using ext 
    if (MimeNames // get filename by using ext) 
     return new MediaTypeHeaderValue(name); 
    else 
     return new MediaTypeHeaderValue(MediaTypeNames.Application.Octet); 
} 

ответ

1

Вы можете использовать Enumerable.FirstOrDefault:

private static MediaTypeHeaderValue GetMimeNameFromExt(string ext) 
{ 
    MimeVideo first = MimeNames 
     .FirstOrDefault(m => m.Ext.Equals(ext, StringComparison.InvariantCultureIgnoreCase)); 
    if(first == null) 
     return new MediaTypeHeaderValue(MediaTypeNames.Application.Octet); 
    else 
     return new MediaTypeHeaderValue(first.File); 
} 

или Where + DefaultIfEmpty:

private static MediaTypeHeaderValue GetMimeNameFromExt(string ext) 
{ 
    return MimeNames 
     .Where(m => m.Ext.Equals(ext, StringComparison.InvariantCultureIgnoreCase)) 
     .Select(m => new MediaTypeHeaderValue(m.File)) 
     .DefaultIfEmpty(new MediaTypeHeaderValue(MediaTypeNames.Application.Octet)) 
     .First(); 
} 

Вы не показали, как вы получите расширение, я предлагаю usig System.IO.Path.GetExtension. Вместо этого я бы использовал Dictionary<string, MimeVideo>.

+0

Отсутствует '.Select (m => новый MediaTypeHeaderValue (m.Ext))'. – Ripple

+0

@ Ripple: вы правы, я отредактировал его. –

Смежные вопросы