2015-03-17 4 views
-1

У меня есть папка, содержащая некоторые звуковые файлы. То, что я хотел бы сделать, - во время выполнения заполнить класс (SoundFileNames.c) как полным, так и файловым именем. Предпочтительно, я хотел бы, чтобы это было так, что если у меня есть файл «MySound.wav» в указанной папке, я мог бы индексировать его так: SoundFileNames.MySound, который создавал C: .. \ MySound.wav. Я не знаю, является ли это лучшим решением или даже возможно. Как я могу это достичь? Любая помощь очень полезна.C# Создание свойств во время выполнения

Благодаря

+8

Хотя это можно создавать динамические объекты со свойствами, как это, вы, вероятно, лучше хранить информацию в нечто вроде 'Словаря <строки, строка>', чтобы вы могли получить доступ к пути через 'SoundFileNames [ "MySound"] ' –

ответ

0

Вот простой SoundPathProvider, что вы могли бы использовать в качестве шаблона, чтобы достигнуть желаемого поведения.

using System; 
using System.IO; 
using System.Linq; 

namespace SoundProvider 
{ 
    public class SoundPathProvider 
    { 
     private readonly string _sourcePath; 

     public SoundPathProvider(string sourcePath) 
     { 
      _sourcePath = sourcePath; 
     } 

     public string GetSoundPath(string soundName) 
     { 
      var files = Directory.EnumerateFiles(_sourcePath); 
      var targetSound = files.FirstOrDefault(x => x.Split('\\').Last() == soundName); 
      if (targetSound != null) 
       return Path.Combine(_sourcePath, soundName); 
      else 
       throw new Exception(string.Format("Sound '{0}' Not Found in '{1}'", soundName, _sourcePath)); 
     } 
    } 
} 

И шаблоны модулей, которые могут помочь вам развить функциональность.

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace SoundProvider 
{ 
    [TestClass] 
    public class SoundPathProviderTests 
    { 
     [ExpectedException(typeof(Exception))] 
     [TestMethod] 
     public void SoundPathProvider_GetNonExistentSoundPath_ThrowsException() 
     { 
      var provider = new SoundPathProvider("C:\\Temp\\SoundProviderSource"); 

      var soundPath = provider.GetSoundPath("NonExistentSound.wav"); 
     } 

     [TestMethod] 
     public void SoundPathProvider_GetExistingSoundPath_ThrowsException() 
     { 
      var provider = new SoundPathProvider("C:\\Temp\\SoundProviderSource"); 

      var soundPath = provider.GetSoundPath("SampleSound.wav"); 

      Assert.AreEqual("C:\\Temp\\SoundProviderSource\\SampleSound.wav", soundPath); 
     } 
    } 
} 
Смежные вопросы