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